Dataset of pm2.5 with lat and lon only¶

1. Load the modules¶

In [1]:
import requests
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

Get API from OpenWeather Webpage

https://openweathermap.org/api

In [2]:
# API Key and City Information
api_key = 'a693b748d40c2a70d69295b2caad893a'
city_name = 'Bangkok,TH'

2. Get Pollution Dataset API and convert to dataframe¶

In [3]:
# Get coordinates from city name (Geocoding API)
geocode_url = f'http://api.openweathermap.org/geo/1.0/direct?q={city_name}&limit=1&appid={api_key}'
response = requests.get(geocode_url)
location_data = response.json()

if not location_data:
    raise ValueError("Invalid city name or no location data available.")

# List of monitoring stations with their coordinates
stations = [
    {'name': '3T', 'lat': 13.7563, 'lon': 100.5018}, #Ratchathewi Station
    {'name': '5T', 'lat': 13.7367, 'lon': 100.5231}, #Suppose to be T54 Pathum Wan Station
    {'name': '10T', 'lat': 13.7291, 'lon': 100.7750}, #Ladkrabang Station
    {'name': '11T', 'lat': 13.7898, 'lon': 100.4486}, #Taling Chan Station
    {'name': '12T', 'lat': 13.8225, 'lon': 100.5147}, # Bang Sue Station
    {'name': '15T', 'lat': 13.7083, 'lon': 100.3728}, #Bang Khae Station
    {'name': '61T', 'lat': 13.6796, 'lon': 100.6067}, #Bang Na Station
]
In [4]:
# Define the time range (from April 1, 2024, to now)
start_date = int(pd.Timestamp("2024-04-05 00:00:00").timestamp())
end_date = int(pd.Timestamp.now().timestamp())

# Fetch air pollution data
pollution_data = []
In [5]:
#Pull all the Variables
for station in stations:
    lat = station['lat']
    lon = station['lon']
    pollution_url = (
        f'http://api.openweathermap.org/data/2.5/air_pollution/history?'
        f'lat={lat}&lon={lon}&start={start_date}&end={end_date}&appid={api_key}'
    )
    
    response = requests.get(pollution_url)
    data = response.json()
    
    if 'list' in data:
        for entry in data['list']:
            dt = pd.to_datetime(entry['dt'], unit='s')
            components = entry['components']
            pollution_data.append({
                'datetime': dt,
                'station': station['name'],
                'lat': lat,
                'lon': lon,
                'pm2_5': components.get('pm2_5', None),
                'pm10': components.get('pm10', None),
                'so2': components.get('so2', None),
                'no2': components.get('no2', None),
                'o3': components.get('o3', None),
                'co': components.get('co', None),
            })
    else:
        print(f"No data available for station {station['name']} (lat={lat}, lon={lon})")

# Convert to DataFrame
pollution_df = pd.DataFrame(pollution_data)
In [6]:
#Check DataFrame Shape
pollution_df.shape
Out[6]:
(60466, 10)
In [7]:
#Check Sample Data first five row
pollution_df.head()
Out[7]:
datetime station lat lon pm2_5 pm10 so2 no2 o3 co
0 2024-04-05 00:00:00 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
1 2024-04-05 01:00:00 3T 13.7563 100.5018 63.50 110.15 46.25 44.55 0.93 1869.20
2 2024-04-05 02:00:00 3T 13.7563 100.5018 64.57 110.58 47.68 45.24 1.79 1869.20
3 2024-04-05 03:00:00 3T 13.7563 100.5018 62.25 106.34 45.30 43.53 1.99 1615.52
4 2024-04-05 04:00:00 3T 13.7563 100.5018 53.40 88.52 36.24 43.18 5.14 1241.68
In [8]:
#Check All Sample Data
pollution_df 
Out[8]:
datetime station lat lon pm2_5 pm10 so2 no2 o3 co
0 2024-04-05 00:00:00 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
1 2024-04-05 01:00:00 3T 13.7563 100.5018 63.50 110.15 46.25 44.55 0.93 1869.20
2 2024-04-05 02:00:00 3T 13.7563 100.5018 64.57 110.58 47.68 45.24 1.79 1869.20
3 2024-04-05 03:00:00 3T 13.7563 100.5018 62.25 106.34 45.30 43.53 1.99 1615.52
4 2024-04-05 04:00:00 3T 13.7563 100.5018 53.40 88.52 36.24 43.18 5.14 1241.68
... ... ... ... ... ... ... ... ... ... ...
60461 2025-04-12 17:00:00 61T 13.6796 100.6067 1.57 2.11 0.27 1.22 12.95 116.50
60462 2025-04-12 18:00:00 61T 13.6796 100.6067 1.59 2.07 0.23 1.12 12.80 118.82
60463 2025-04-12 19:00:00 61T 13.6796 100.6067 1.65 2.06 0.22 1.09 12.47 121.14
60464 2025-04-12 20:00:00 61T 13.6796 100.6067 1.73 2.11 0.24 1.13 11.94 123.10
60465 2025-04-12 21:00:00 61T 13.6796 100.6067 1.83 2.21 0.27 1.19 11.53 125.59

60466 rows × 10 columns

In [9]:
pollution_df .tail()
Out[9]:
datetime station lat lon pm2_5 pm10 so2 no2 o3 co
60461 2025-04-12 17:00:00 61T 13.6796 100.6067 1.57 2.11 0.27 1.22 12.95 116.50
60462 2025-04-12 18:00:00 61T 13.6796 100.6067 1.59 2.07 0.23 1.12 12.80 118.82
60463 2025-04-12 19:00:00 61T 13.6796 100.6067 1.65 2.06 0.22 1.09 12.47 121.14
60464 2025-04-12 20:00:00 61T 13.6796 100.6067 1.73 2.11 0.24 1.13 11.94 123.10
60465 2025-04-12 21:00:00 61T 13.6796 100.6067 1.83 2.21 0.27 1.19 11.53 125.59

2. Pre-Processing¶

In [10]:
pollution_df['datetime'].diff().value_counts()
Out[10]:
datetime
0 days 01:00:00        60403
1 days 01:00:00           42
2 days 01:00:00            7
5 days 01:00:00            7
-373 days +03:00:00        6
Name: count, dtype: int64

Handling gaps¶

In [11]:
actual_range = pd.date_range(start=pollution_df ['datetime'].min(), end=pollution_df ['datetime'].max(), freq='h')
actual_range
Out[11]:
DatetimeIndex(['2024-04-05 00:00:00', '2024-04-05 01:00:00',
               '2024-04-05 02:00:00', '2024-04-05 03:00:00',
               '2024-04-05 04:00:00', '2024-04-05 05:00:00',
               '2024-04-05 06:00:00', '2024-04-05 07:00:00',
               '2024-04-05 08:00:00', '2024-04-05 09:00:00',
               ...
               '2025-04-12 12:00:00', '2025-04-12 13:00:00',
               '2025-04-12 14:00:00', '2025-04-12 15:00:00',
               '2025-04-12 16:00:00', '2025-04-12 17:00:00',
               '2025-04-12 18:00:00', '2025-04-12 19:00:00',
               '2025-04-12 20:00:00', '2025-04-12 21:00:00'],
              dtype='datetime64[ns]', length=8950, freq='h')

Creating New DataFrame¶

In [12]:
# Create a new DataFrame with all datetime and station combinations
stations = pollution_df [['lat', 'lon']].drop_duplicates()

# Create full cartesian product of stations × timestamps
full_index = pd.MultiIndex.from_product([actual_range, stations.itertuples(index=False, name=None)], 
                                        names=["datetime", "station_info"])
In [13]:
# Convert station lat/lon to tuples for merging
pollution_df ["station_info"] = list(zip(pollution_df ["lat"], pollution_df ["lon"]))

# Merge with full datetime-station grid to fill missing timestamps per station
full_df = pd.DataFrame(index=full_index).reset_index().merge(pollution_df , on=["datetime", "station_info"], how="left")

# Split 'station_info' back into separate lat/lon columns
full_df[["lat", "lon"]] = pd.DataFrame(full_df["station_info"].tolist(), index=full_df.index)

# Drop redundant column
full_df.drop(columns=["station_info"], inplace=True)
In [14]:
# Check for missing timestamps
print(full_df["datetime"].diff().value_counts())

print('\n')
print('-'*50)
print('There can be a duplicate timestamp due to many stations are being recorded at the same time')
datetime
0 days 00:00:00    53700
0 days 01:00:00     8949
Name: count, dtype: int64


--------------------------------------------------
There can be a duplicate timestamp due to many stations are being recorded at the same time

Check missing values¶

In [15]:
#Check Missing Values
full_df.isna().sum()
Out[15]:
datetime       0
station     2184
lat            0
lon            0
pm2_5       2184
pm10        2184
so2         2184
no2         2184
o3          2184
co          2184
dtype: int64

Check unique values of Latitide and Longtitude¶

In [16]:
#Check Latitude unique Value
full_df['lat'].unique()
Out[16]:
array([13.7563, 13.7367, 13.7291, 13.7898, 13.8225, 13.7083, 13.6796])
In [17]:
#Check Longitude unique Value
full_df['lon'].unique()
Out[17]:
array([100.5018, 100.5231, 100.775 , 100.4486, 100.5147, 100.3728,
       100.6067])
In [18]:
full_df['station'].unique()
Out[18]:
array(['3T', '5T', '10T', '11T', '12T', '15T', '61T', nan], dtype=object)
In [19]:
full_df.isna().sum()
Out[19]:
datetime       0
station     2184
lat            0
lon            0
pm2_5       2184
pm10        2184
so2         2184
no2         2184
o3          2184
co          2184
dtype: int64
In [20]:
full_df.groupby(['lat', 'lon'])['station'].nunique()
Out[20]:
lat      lon     
13.6796  100.6067    1
13.7083  100.3728    1
13.7291  100.7750    1
13.7367  100.5231    1
13.7563  100.5018    1
13.7898  100.4486    1
13.8225  100.5147    1
Name: station, dtype: int64
In [21]:
full_df[full_df['station'].isna()]
Out[21]:
datetime station lat lon pm2_5 pm10 so2 no2 o3 co
175 2024-04-06 01:00:00 NaN 13.7563 100.5018 NaN NaN NaN NaN NaN NaN
176 2024-04-06 01:00:00 NaN 13.7367 100.5231 NaN NaN NaN NaN NaN NaN
177 2024-04-06 01:00:00 NaN 13.7291 100.7750 NaN NaN NaN NaN NaN NaN
178 2024-04-06 01:00:00 NaN 13.7898 100.4486 NaN NaN NaN NaN NaN NaN
179 2024-04-06 01:00:00 NaN 13.8225 100.5147 NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ...
61490 2025-04-06 00:00:00 NaN 13.7291 100.7750 NaN NaN NaN NaN NaN NaN
61491 2025-04-06 00:00:00 NaN 13.7898 100.4486 NaN NaN NaN NaN NaN NaN
61492 2025-04-06 00:00:00 NaN 13.8225 100.5147 NaN NaN NaN NaN NaN NaN
61493 2025-04-06 00:00:00 NaN 13.7083 100.3728 NaN NaN NaN NaN NaN NaN
61494 2025-04-06 00:00:00 NaN 13.6796 100.6067 NaN NaN NaN NaN NaN NaN

2184 rows × 10 columns

In [22]:
full_df['station'].value_counts()
Out[22]:
station
3T     8638
5T     8638
10T    8638
11T    8638
12T    8638
15T    8638
61T    8638
Name: count, dtype: int64
In [23]:
isna = full_df['station'].isna().value_counts() 
In [24]:
missing_stations = full_df[full_df['station'].isna()]
missing_stations
Out[24]:
datetime station lat lon pm2_5 pm10 so2 no2 o3 co
175 2024-04-06 01:00:00 NaN 13.7563 100.5018 NaN NaN NaN NaN NaN NaN
176 2024-04-06 01:00:00 NaN 13.7367 100.5231 NaN NaN NaN NaN NaN NaN
177 2024-04-06 01:00:00 NaN 13.7291 100.7750 NaN NaN NaN NaN NaN NaN
178 2024-04-06 01:00:00 NaN 13.7898 100.4486 NaN NaN NaN NaN NaN NaN
179 2024-04-06 01:00:00 NaN 13.8225 100.5147 NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ...
61490 2025-04-06 00:00:00 NaN 13.7291 100.7750 NaN NaN NaN NaN NaN NaN
61491 2025-04-06 00:00:00 NaN 13.7898 100.4486 NaN NaN NaN NaN NaN NaN
61492 2025-04-06 00:00:00 NaN 13.8225 100.5147 NaN NaN NaN NaN NaN NaN
61493 2025-04-06 00:00:00 NaN 13.7083 100.3728 NaN NaN NaN NaN NaN NaN
61494 2025-04-06 00:00:00 NaN 13.6796 100.6067 NaN NaN NaN NaN NaN NaN

2184 rows × 10 columns

In [25]:
full_df.groupby('station')[['lat', 'lon']].nunique()
Out[25]:
lat lon
station
10T 1 1
11T 1 1
12T 1 1
15T 1 1
3T 1 1
5T 1 1
61T 1 1
In [26]:
full_df.groupby(['lat', 'lon'])['station'].nunique()
Out[26]:
lat      lon     
13.6796  100.6067    1
13.7083  100.3728    1
13.7291  100.7750    1
13.7367  100.5231    1
13.7563  100.5018    1
13.7898  100.4486    1
13.8225  100.5147    1
Name: station, dtype: int64

Remove the (Roadside, Bangkok) emtries that shared the same lat, lon¶

In [27]:
full_df.groupby(['lat', 'lon'])['station'].unique()
Out[27]:
lat      lon     
13.6796  100.6067    [61T, nan]
13.7083  100.3728    [15T, nan]
13.7291  100.7750    [10T, nan]
13.7367  100.5231     [5T, nan]
13.7563  100.5018     [3T, nan]
13.7898  100.4486    [11T, nan]
13.8225  100.5147    [12T, nan]
Name: station, dtype: object
In [28]:
full_df.head()
Out[28]:
datetime station lat lon pm2_5 pm10 so2 no2 o3 co
0 2024-04-05 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
1 2024-04-05 5T 13.7367 100.5231 60.38 105.99 46.73 42.84 0.17 1588.82
2 2024-04-05 10T 13.7291 100.7750 24.00 64.58 6.68 12.34 36.84 487.33
3 2024-04-05 11T 13.7898 100.4486 53.13 85.17 25.75 34.62 5.63 961.30
4 2024-04-05 12T 13.8225 100.5147 60.38 105.99 46.73 42.84 0.17 1588.82
In [29]:
pd.Series(full_df.index).diff().value_counts()
Out[29]:
1.0    62649
Name: count, dtype: int64
In [30]:
full_df.isna().sum()
Out[30]:
datetime       0
station     2184
lat            0
lon            0
pm2_5       2184
pm10        2184
so2         2184
no2         2184
o3          2184
co          2184
dtype: int64

3. Save the dataframe¶

In [31]:
import os
print(os.getcwd())
c:\Users\Legion 5 Pro\OneDrive\Documents\web_v3\Project PM2.5 code(11-4-25)\source_code
In [32]:
full_df.to_csv('../datasets/pm25_bangkok_2025_lat_lon_.csv', index=True)
In [33]:
full_df
Out[33]:
datetime station lat lon pm2_5 pm10 so2 no2 o3 co
0 2024-04-05 00:00:00 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
1 2024-04-05 00:00:00 5T 13.7367 100.5231 60.38 105.99 46.73 42.84 0.17 1588.82
2 2024-04-05 00:00:00 10T 13.7291 100.7750 24.00 64.58 6.68 12.34 36.84 487.33
3 2024-04-05 00:00:00 11T 13.7898 100.4486 53.13 85.17 25.75 34.62 5.63 961.30
4 2024-04-05 00:00:00 12T 13.8225 100.5147 60.38 105.99 46.73 42.84 0.17 1588.82
... ... ... ... ... ... ... ... ... ... ...
62645 2025-04-12 21:00:00 10T 13.7291 100.7750 1.83 2.21 0.27 1.19 11.53 125.59
62646 2025-04-12 21:00:00 11T 13.7898 100.4486 3.05 3.48 0.25 1.57 6.27 149.25
62647 2025-04-12 21:00:00 12T 13.8225 100.5147 4.75 5.61 0.59 2.80 6.24 200.72
62648 2025-04-12 21:00:00 15T 13.7083 100.3728 4.27 4.74 0.23 1.94 1.04 172.77
62649 2025-04-12 21:00:00 61T 13.6796 100.6067 1.83 2.21 0.27 1.19 11.53 125.59

62650 rows × 10 columns

In [34]:
pd.Series(full_df.index).diff().value_counts()
Out[34]:
1.0    62649
Name: count, dtype: int64

4. Loading the saved dataset and start analysis¶

In [35]:
df = pd.read_csv('../datasets/pm25_bangkok_2025_lat_lon_.csv', parse_dates=['datetime'])
df.head()
Out[35]:
Unnamed: 0 datetime station lat lon pm2_5 pm10 so2 no2 o3 co
0 0 2024-04-05 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
1 1 2024-04-05 5T 13.7367 100.5231 60.38 105.99 46.73 42.84 0.17 1588.82
2 2 2024-04-05 10T 13.7291 100.7750 24.00 64.58 6.68 12.34 36.84 487.33
3 3 2024-04-05 11T 13.7898 100.4486 53.13 85.17 25.75 34.62 5.63 961.30
4 4 2024-04-05 12T 13.8225 100.5147 60.38 105.99 46.73 42.84 0.17 1588.82

Validate the loaded dataframe¶

In [36]:
df.isna().sum()
Out[36]:
Unnamed: 0       0
datetime         0
station       2184
lat              0
lon              0
pm2_5         2184
pm10          2184
so2           2184
no2           2184
o3            2184
co            2184
dtype: int64
In [37]:
df.set_index('datetime', inplace=True)
In [38]:
pd.Series(df.index).diff().value_counts()
Out[38]:
datetime
0 days 00:00:00    53700
0 days 01:00:00     8949
Name: count, dtype: int64
In [39]:
df.head()
Out[39]:
Unnamed: 0 station lat lon pm2_5 pm10 so2 no2 o3 co
datetime
2024-04-05 0 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
2024-04-05 1 5T 13.7367 100.5231 60.38 105.99 46.73 42.84 0.17 1588.82
2024-04-05 2 10T 13.7291 100.7750 24.00 64.58 6.68 12.34 36.84 487.33
2024-04-05 3 11T 13.7898 100.4486 53.13 85.17 25.75 34.62 5.63 961.30
2024-04-05 4 12T 13.8225 100.5147 60.38 105.99 46.73 42.84 0.17 1588.82
In [40]:
df.reset_index(inplace=True)
df
Out[40]:
datetime Unnamed: 0 station lat lon pm2_5 pm10 so2 no2 o3 co
0 2024-04-05 00:00:00 0 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
1 2024-04-05 00:00:00 1 5T 13.7367 100.5231 60.38 105.99 46.73 42.84 0.17 1588.82
2 2024-04-05 00:00:00 2 10T 13.7291 100.7750 24.00 64.58 6.68 12.34 36.84 487.33
3 2024-04-05 00:00:00 3 11T 13.7898 100.4486 53.13 85.17 25.75 34.62 5.63 961.30
4 2024-04-05 00:00:00 4 12T 13.8225 100.5147 60.38 105.99 46.73 42.84 0.17 1588.82
... ... ... ... ... ... ... ... ... ... ... ...
62645 2025-04-12 21:00:00 62645 10T 13.7291 100.7750 1.83 2.21 0.27 1.19 11.53 125.59
62646 2025-04-12 21:00:00 62646 11T 13.7898 100.4486 3.05 3.48 0.25 1.57 6.27 149.25
62647 2025-04-12 21:00:00 62647 12T 13.8225 100.5147 4.75 5.61 0.59 2.80 6.24 200.72
62648 2025-04-12 21:00:00 62648 15T 13.7083 100.3728 4.27 4.74 0.23 1.94 1.04 172.77
62649 2025-04-12 21:00:00 62649 61T 13.6796 100.6067 1.83 2.21 0.27 1.19 11.53 125.59

62650 rows × 11 columns

5. API request for historical weather data¶

In [41]:
# Import additional modules
import time
from datetime import datetime, timedelta
In [42]:
# OpenWeather API Key (Replace with your actual API key)
API_KEY = "45ec5c0e59ce5937572ea6e6629eabb3"

# List of monitoring stations with coordinates
stations = [
    {'name': '3T', 'lat': 13.7563, 'lon': 100.5018},
    {'name': '5T', 'lat': 13.7367, 'lon': 100.5231},
    {'name': '10T', 'lat': 13.7291, 'lon': 100.7750},
    {'name': '11T', 'lat': 13.7898, 'lon': 100.4486},
    {'name': '12T', 'lat': 13.8225, 'lon': 100.5147},
    {'name': '15T', 'lat': 13.7083, 'lon': 100.3728},
    {'name': '61T', 'lat': 13.6796, 'lon': 100.6067},
]

# Define the time range (From 2024-04-01 to now)
start_date = datetime(2024, 4, 5)
end_date = datetime.now()
delta = timedelta(days=30)  # Fetch 30 days at a time

# Base URL for OpenWeather History API
BASE_URL = "https://history.openweathermap.org/data/2.5/history/city"
In [43]:
# Data storage
all_data = []

# Fetch weather data for each station
for station in stations:
    print(f"Fetching data for {station['name']}...")

    temp_start_date = start_date  # Keep track of moving start date

    while temp_start_date < end_date:
        # Convert to Unix timestamp
        start_timestamp = int(temp_start_date.timestamp())
        end_timestamp = int((temp_start_date + delta).timestamp())

        # Construct API request URL
        url = (
            f"{BASE_URL}?lat={station['lat']}&lon={station['lon']}"
            f"&type=hour&start={start_timestamp}&end={end_timestamp}&appid={API_KEY}"
        )

        # Send request
        response = requests.get(url)

        # Check response status
        if response.status_code == 200:
            data = response.json()

            # Extract required fields
            for entry in data.get("list", []):
                record = {
                    "station": station["name"],
                    "timestamp": pd.to_datetime(entry["dt"], unit="s"),
                    "temp": entry["main"].get("temp", None),
                    "pressure": entry["main"].get("pressure", None),
                    "grnd_level": entry["main"].get("grnd_level", None),
                    "humidity": entry["main"].get("humidity", None),
                    "windspeed": entry["wind"].get("speed", None),
                    "winddeg": entry["wind"].get("deg", None),
                    "cloudall": entry["clouds"].get("all", None),
                    "weathermain": entry["weather"][0].get("main", None) if entry["weather"] else None
                }
                all_data.append(record)

            print(f"Data retrieved for {temp_start_date} - {temp_start_date + delta}")

        else:
            print(f"API failed for {temp_start_date} - {temp_start_date + delta}. Status Code: {response.status_code}")

        # Move to the next time window
        temp_start_date += delta

        # Avoid API rate limits
        time.sleep(1)
Fetching data for 3T...
API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400
Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00
Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00
Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00
Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00
Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00
Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00
Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00
Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00
Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00
Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00
Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00
Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
Fetching data for 5T...
API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400
Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00
Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00
Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00
Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00
Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00
Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00
Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00
Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00
Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00
Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00
Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00
Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
Fetching data for 10T...
API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400
Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00
Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00
Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00
Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00
Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00
Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00
Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00
Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00
Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00
Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00
Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00
Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
Fetching data for 11T...
API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400
Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00
Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00
Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00
Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00
Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00
Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00
Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00
Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00
Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00
Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00
Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00
Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
Fetching data for 12T...
API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400
Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00
Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00
Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00
Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00
Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00
Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00
Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00
Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00
Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00
Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00
Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00
Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
Fetching data for 15T...
API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400
Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00
Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00
Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00
Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00
Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00
Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00
Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00
Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00
Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00
Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00
Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00
Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
Fetching data for 61T...
API failed for 2024-04-05 00:00:00 - 2024-05-05 00:00:00. Status Code: 400
Data retrieved for 2024-05-05 00:00:00 - 2024-06-04 00:00:00
Data retrieved for 2024-06-04 00:00:00 - 2024-07-04 00:00:00
Data retrieved for 2024-07-04 00:00:00 - 2024-08-03 00:00:00
Data retrieved for 2024-08-03 00:00:00 - 2024-09-02 00:00:00
Data retrieved for 2024-09-02 00:00:00 - 2024-10-02 00:00:00
Data retrieved for 2024-10-02 00:00:00 - 2024-11-01 00:00:00
Data retrieved for 2024-11-01 00:00:00 - 2024-12-01 00:00:00
Data retrieved for 2024-12-01 00:00:00 - 2024-12-31 00:00:00
Data retrieved for 2024-12-31 00:00:00 - 2025-01-30 00:00:00
Data retrieved for 2025-01-30 00:00:00 - 2025-03-01 00:00:00
Data retrieved for 2025-03-01 00:00:00 - 2025-03-31 00:00:00
Data retrieved for 2025-03-31 00:00:00 - 2025-04-30 00:00:00
In [44]:
#Check data after being pulled throught API 
all_data
Out[44]:
[{'station': '3T',
  'timestamp': Timestamp('2024-05-04 17:00:00'),
  'temp': 305.44,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 6.57,
  'winddeg': 181,
  'cloudall': 63,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-04 18:00:00'),
  'temp': 304.42,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 6.04,
  'winddeg': 179,
  'cloudall': 68,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-04 19:00:00'),
  'temp': 304.42,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 5.53,
  'winddeg': 176,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-04 20:00:00'),
  'temp': 304.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 5.03,
  'winddeg': 174,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-04 21:00:00'),
  'temp': 304.52,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 4.84,
  'winddeg': 168,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-04 22:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 4.65,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-04 23:00:00'),
  'temp': 304.52,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 3.92,
  'winddeg': 180,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 00:00:00'),
  'temp': 304.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 2.99,
  'winddeg': 183,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 01:00:00'),
  'temp': 305.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 2.71,
  'winddeg': 185,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 02:00:00'),
  'temp': 308.06,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 52,
  'windspeed': 2.93,
  'winddeg': 174,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 03:00:00'),
  'temp': 310.19,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 43,
  'windspeed': 2.7,
  'winddeg': 173,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 04:00:00'),
  'temp': 310.59,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 39,
  'windspeed': 3.31,
  'winddeg': 170,
  'cloudall': 88,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 05:00:00'),
  'temp': 311.21,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 38,
  'windspeed': 4.48,
  'winddeg': 168,
  'cloudall': 71,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 06:00:00'),
  'temp': 310.56,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 39,
  'windspeed': 5.25,
  'winddeg': 175,
  'cloudall': 75,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 07:00:00'),
  'temp': 311.29,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 44,
  'windspeed': 6.54,
  'winddeg': 175,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 08:00:00'),
  'temp': 312.22,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 45,
  'windspeed': 6.33,
  'winddeg': 179,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 09:00:00'),
  'temp': 311.55,
  'pressure': 1002,
  'grnd_level': None,
  'humidity': 44,
  'windspeed': 5.57,
  'winddeg': 175,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 10:00:00'),
  'temp': 311.89,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 43,
  'windspeed': 7.83,
  'winddeg': 152,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 11:00:00'),
  'temp': 309.99,
  'pressure': 1002,
  'grnd_level': None,
  'humidity': 48,
  'windspeed': 6.86,
  'winddeg': 162,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 12:00:00'),
  'temp': 308.21,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 53,
  'windspeed': 6.84,
  'winddeg': 169,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 13:00:00'),
  'temp': 306.99,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 7.25,
  'winddeg': 184,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 14:00:00'),
  'temp': 306.79,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 6.7,
  'winddeg': 180,
  'cloudall': 93,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 15:00:00'),
  'temp': 306.56,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 6.39,
  'winddeg': 177,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 16:00:00'),
  'temp': 305.54,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 6.09,
  'winddeg': 175,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 17:00:00'),
  'temp': 305.44,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 5.84,
  'winddeg': 169,
  'cloudall': 93,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 18:00:00'),
  'temp': 305.34,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 5.48,
  'winddeg': 176,
  'cloudall': 36,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 19:00:00'),
  'temp': 304.3,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 51,
  'windspeed': 5.27,
  'winddeg': 174,
  'cloudall': 3,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 20:00:00'),
  'temp': 304.68,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 53,
  'windspeed': 5.33,
  'winddeg': 171,
  'cloudall': 7,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 21:00:00'),
  'temp': 304.68,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 5.04,
  'winddeg': 175,
  'cloudall': 7,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 22:00:00'),
  'temp': 305.07,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 4.93,
  'winddeg': 169,
  'cloudall': 7,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-05 23:00:00'),
  'temp': 305.07,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 4.89,
  'winddeg': 170,
  'cloudall': 7,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 00:00:00'),
  'temp': 305.07,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 4.86,
  'winddeg': 182,
  'cloudall': 19,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 01:00:00'),
  'temp': 305.01,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 56,
  'windspeed': 4.06,
  'winddeg': 185,
  'cloudall': 7,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 02:00:00'),
  'temp': 307.7,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 3.99,
  'winddeg': 187,
  'cloudall': 3,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 03:00:00'),
  'temp': 308.74,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 4.29,
  'winddeg': 186,
  'cloudall': 2,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 04:00:00'),
  'temp': 309.47,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 53,
  'windspeed': 4.54,
  'winddeg': 184,
  'cloudall': 2,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 05:00:00'),
  'temp': 310.61,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 4.69,
  'winddeg': 185,
  'cloudall': 1,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 06:00:00'),
  'temp': 312.19,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 40,
  'windspeed': 5.11,
  'winddeg': 185,
  'cloudall': 3,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 07:00:00'),
  'temp': 311.37,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 39,
  'windspeed': 5.49,
  'winddeg': 184,
  'cloudall': 21,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 08:00:00'),
  'temp': 312.01,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 38,
  'windspeed': 6.02,
  'winddeg': 173,
  'cloudall': 38,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 09:00:00'),
  'temp': 310.65,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 42,
  'windspeed': 6.54,
  'winddeg': 162,
  'cloudall': 55,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 10:00:00'),
  'temp': 311.22,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 40,
  'windspeed': 5.6,
  'winddeg': 173,
  'cloudall': 44,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 11:00:00'),
  'temp': 310.17,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 41,
  'windspeed': 6.44,
  'winddeg': 177,
  'cloudall': 51,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 12:00:00'),
  'temp': 305.79,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 45,
  'windspeed': 6.94,
  'winddeg': 181,
  'cloudall': 33,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 13:00:00'),
  'temp': 305.42,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 49,
  'windspeed': 6.45,
  'winddeg': 157,
  'cloudall': 37,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 14:00:00'),
  'temp': 305.42,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 50,
  'windspeed': 6.25,
  'winddeg': 140,
  'cloudall': 32,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 15:00:00'),
  'temp': 305.24,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 50,
  'windspeed': 4.94,
  'winddeg': 131,
  'cloudall': 23,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 16:00:00'),
  'temp': 305.34,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 52,
  'windspeed': 4.92,
  'winddeg': 173,
  'cloudall': 19,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 17:00:00'),
  'temp': 305.34,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 5.56,
  'winddeg': 177,
  'cloudall': 16,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 18:00:00'),
  'temp': 305.3,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 5.35,
  'winddeg': 177,
  'cloudall': 16,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 19:00:00'),
  'temp': 305.13,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 4.9,
  'winddeg': 184,
  'cloudall': 3,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 20:00:00'),
  'temp': 305.07,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 4.76,
  'winddeg': 187,
  'cloudall': 2,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 21:00:00'),
  'temp': 304.63,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 3.88,
  'winddeg': 187,
  'cloudall': 2,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 22:00:00'),
  'temp': 304.63,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 3.45,
  'winddeg': 176,
  'cloudall': 2,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-06 23:00:00'),
  'temp': 304.41,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 3.47,
  'winddeg': 180,
  'cloudall': 1,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 00:00:00'),
  'temp': 304.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 3.56,
  'winddeg': 185,
  'cloudall': 14,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 01:00:00'),
  'temp': 305.35,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 3.32,
  'winddeg': 187,
  'cloudall': 94,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 02:00:00'),
  'temp': 304.49,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 3.37,
  'winddeg': 204,
  'cloudall': 96,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 03:00:00'),
  'temp': 303.37,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 3.05,
  'winddeg': 195,
  'cloudall': 89,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 04:00:00'),
  'temp': 303.96,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 5.34,
  'winddeg': 181,
  'cloudall': 90,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 05:00:00'),
  'temp': 303.68,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 6.58,
  'winddeg': 180,
  'cloudall': 87,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 06:00:00'),
  'temp': 303.3,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 6.48,
  'winddeg': 179,
  'cloudall': 84,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 07:00:00'),
  'temp': 303.56,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 5.06,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 08:00:00'),
  'temp': 303.14,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 4.54,
  'winddeg': 179,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 09:00:00'),
  'temp': 303.1,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 4.4,
  'winddeg': 199,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 10:00:00'),
  'temp': 302.85,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.88,
  'winddeg': 165,
  'cloudall': 95,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 11:00:00'),
  'temp': 302.69,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 4.82,
  'winddeg': 155,
  'cloudall': 95,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 12:00:00'),
  'temp': 302.81,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 4.26,
  'winddeg': 136,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 13:00:00'),
  'temp': 302.29,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 3.08,
  'winddeg': 145,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 14:00:00'),
  'temp': 301.56,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.9,
  'winddeg': 162,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 15:00:00'),
  'temp': 301.78,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.18,
  'winddeg': 160,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 16:00:00'),
  'temp': 301.77,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.38,
  'winddeg': 149,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 17:00:00'),
  'temp': 301.79,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 1.7,
  'winddeg': 184,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 18:00:00'),
  'temp': 301.16,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 1.92,
  'winddeg': 147,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 19:00:00'),
  'temp': 301.06,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 1.64,
  'winddeg': 162,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 20:00:00'),
  'temp': 301.05,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 1.23,
  'winddeg': 183,
  'cloudall': 88,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 21:00:00'),
  'temp': 301.55,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 1.04,
  'winddeg': 203,
  'cloudall': 91,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 22:00:00'),
  'temp': 301.63,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 0.5,
  'winddeg': 200,
  'cloudall': 93,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-07 23:00:00'),
  'temp': 301.44,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 0.56,
  'winddeg': 74,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 00:00:00'),
  'temp': 301.11,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.02,
  'winddeg': 57,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 01:00:00'),
  'temp': 302.78,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 1.96,
  'winddeg': 63,
  'cloudall': 84,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 02:00:00'),
  'temp': 303.45,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 1.17,
  'winddeg': 48,
  'cloudall': 87,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 03:00:00'),
  'temp': 305.63,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 0.96,
  'winddeg': 56,
  'cloudall': 91,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 04:00:00'),
  'temp': 306.89,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 0.81,
  'winddeg': 120,
  'cloudall': 93,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 05:00:00'),
  'temp': 308.3,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 48,
  'windspeed': 1.55,
  'winddeg': 149,
  'cloudall': 92,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 06:00:00'),
  'temp': 310.27,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 42,
  'windspeed': 1.33,
  'winddeg': 153,
  'cloudall': 80,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 07:00:00'),
  'temp': 309.54,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 33,
  'windspeed': 2.1,
  'winddeg': 184,
  'cloudall': 69,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 08:00:00'),
  'temp': 311.18,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 39,
  'windspeed': 3.46,
  'winddeg': 195,
  'cloudall': 73,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 09:00:00'),
  'temp': 309.61,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 43,
  'windspeed': 4.73,
  'winddeg': 191,
  'cloudall': 72,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 10:00:00'),
  'temp': 309.51,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 45,
  'windspeed': 5.96,
  'winddeg': 185,
  'cloudall': 73,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 11:00:00'),
  'temp': 309.07,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 41,
  'windspeed': 5.8,
  'winddeg': 178,
  'cloudall': 62,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 12:00:00'),
  'temp': 307.27,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 43,
  'windspeed': 4.69,
  'winddeg': 181,
  'cloudall': 74,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 13:00:00'),
  'temp': 307.32,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 42,
  'windspeed': 4.68,
  'winddeg': 189,
  'cloudall': 19,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 14:00:00'),
  'temp': 306.95,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 44,
  'windspeed': 5.5,
  'winddeg': 193,
  'cloudall': 30,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 15:00:00'),
  'temp': 305.97,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 41,
  'windspeed': 5.53,
  'winddeg': 194,
  'cloudall': 43,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 16:00:00'),
  'temp': 304.19,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 5.39,
  'winddeg': 192,
  'cloudall': 50,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 17:00:00'),
  'temp': 305.97,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 42,
  'windspeed': 5.28,
  'winddeg': 189,
  'cloudall': 56,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 18:00:00'),
  'temp': 302.98,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.9,
  'winddeg': 191,
  'cloudall': 63,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 19:00:00'),
  'temp': 304.86,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 4.52,
  'winddeg': 192,
  'cloudall': 55,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 20:00:00'),
  'temp': 302.58,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 3.81,
  'winddeg': 188,
  'cloudall': 63,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 21:00:00'),
  'temp': 304.25,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 3.4,
  'winddeg': 183,
  'cloudall': 73,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 22:00:00'),
  'temp': 304.19,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.42,
  'winddeg': 178,
  'cloudall': 79,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-08 23:00:00'),
  'temp': 304.19,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.24,
  'winddeg': 178,
  'cloudall': 82,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 00:00:00'),
  'temp': 303.98,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.37,
  'winddeg': 188,
  'cloudall': 73,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 01:00:00'),
  'temp': 305.75,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 3.42,
  'winddeg': 183,
  'cloudall': 92,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 02:00:00'),
  'temp': 306.31,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 3.5,
  'winddeg': 184,
  'cloudall': 81,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 03:00:00'),
  'temp': 306.78,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 3.45,
  'winddeg': 192,
  'cloudall': 60,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 04:00:00'),
  'temp': 307.27,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 3.84,
  'winddeg': 184,
  'cloudall': 49,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 05:00:00'),
  'temp': 308.88,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 4.36,
  'winddeg': 178,
  'cloudall': 42,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 06:00:00'),
  'temp': 309.88,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 56,
  'windspeed': 4.5,
  'winddeg': 173,
  'cloudall': 40,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 07:00:00'),
  'temp': 309.3,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 5.65,
  'winddeg': 173,
  'cloudall': 84,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 08:00:00'),
  'temp': 307.91,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 5.44,
  'winddeg': 175,
  'cloudall': 82,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 09:00:00'),
  'temp': 308.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 5.53,
  'winddeg': 175,
  'cloudall': 79,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 10:00:00'),
  'temp': 307.44,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 6.39,
  'winddeg': 172,
  'cloudall': 62,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 11:00:00'),
  'temp': 306.72,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 6.28,
  'winddeg': 175,
  'cloudall': 51,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 12:00:00'),
  'temp': 306.39,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 6.38,
  'winddeg': 179,
  'cloudall': 43,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 13:00:00'),
  'temp': 305.47,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 5.12,
  'winddeg': 184,
  'cloudall': 2,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 14:00:00'),
  'temp': 305.34,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 4.4,
  'winddeg': 183,
  'cloudall': 5,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 15:00:00'),
  'temp': 305.1,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 4.44,
  'winddeg': 187,
  'cloudall': 9,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 16:00:00'),
  'temp': 304.56,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 4.8,
  'winddeg': 184,
  'cloudall': 26,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 17:00:00'),
  'temp': 305.03,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 5.09,
  'winddeg': 181,
  'cloudall': 41,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 18:00:00'),
  'temp': 304.03,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 4.01,
  'winddeg': 178,
  'cloudall': 69,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 19:00:00'),
  'temp': 304.58,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 3.5,
  'winddeg': 179,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 20:00:00'),
  'temp': 304.13,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 2.87,
  'winddeg': 201,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 21:00:00'),
  'temp': 304.06,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 2.46,
  'winddeg': 209,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 22:00:00'),
  'temp': 303.71,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 2.19,
  'winddeg': 215,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-09 23:00:00'),
  'temp': 303.16,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 1.91,
  'winddeg': 225,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 00:00:00'),
  'temp': 304.24,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 1.77,
  'winddeg': 223,
  'cloudall': 87,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 01:00:00'),
  'temp': 304.61,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 1.5,
  'winddeg': 207,
  'cloudall': 89,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 02:00:00'),
  'temp': 305.99,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 1.49,
  'winddeg': 180,
  'cloudall': 63,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 03:00:00'),
  'temp': 306.16,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 2.41,
  'winddeg': 173,
  'cloudall': 52,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 04:00:00'),
  'temp': 306.97,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 52,
  'windspeed': 3.22,
  'winddeg': 176,
  'cloudall': 57,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 05:00:00'),
  'temp': 308.37,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 50,
  'windspeed': 4.57,
  'winddeg': 180,
  'cloudall': 58,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 06:00:00'),
  'temp': 310.1,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 48,
  'windspeed': 5.33,
  'winddeg': 179,
  'cloudall': 55,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 07:00:00'),
  'temp': 308.61,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 48,
  'windspeed': 6.23,
  'winddeg': 183,
  'cloudall': 82,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 08:00:00'),
  'temp': 309.54,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 43,
  'windspeed': 6.24,
  'winddeg': 180,
  'cloudall': 77,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 09:00:00'),
  'temp': 308.5,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 49,
  'windspeed': 6.32,
  'winddeg': 175,
  'cloudall': 84,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 10:00:00'),
  'temp': 308.28,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 6.74,
  'winddeg': 184,
  'cloudall': 88,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 11:00:00'),
  'temp': 306.03,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 44,
  'windspeed': 6.87,
  'winddeg': 185,
  'cloudall': 90,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 12:00:00'),
  'temp': 304.87,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 41,
  'windspeed': 6.17,
  'winddeg': 183,
  'cloudall': 77,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 13:00:00'),
  'temp': 304,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 49,
  'windspeed': 5.68,
  'winddeg': 185,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 14:00:00'),
  'temp': 304.04,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 45,
  'windspeed': 4.62,
  'winddeg': 201,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 15:00:00'),
  'temp': 303.98,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 46,
  'windspeed': 5.04,
  'winddeg': 190,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 16:00:00'),
  'temp': 305.59,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 3.78,
  'winddeg': 204,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 17:00:00'),
  'temp': 304.79,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 44,
  'windspeed': 2.3,
  'winddeg': 212,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 18:00:00'),
  'temp': 304.22,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 2.35,
  'winddeg': 218,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 19:00:00'),
  'temp': 302.21,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 44,
  'windspeed': 1.93,
  'winddeg': 235,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 20:00:00'),
  'temp': 302.5,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 1.79,
  'winddeg': 240,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 21:00:00'),
  'temp': 303.95,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 1.4,
  'winddeg': 236,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 22:00:00'),
  'temp': 304.38,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 0.61,
  'winddeg': 242,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-10 23:00:00'),
  'temp': 304.36,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 1.36,
  'winddeg': 208,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 00:00:00'),
  'temp': 304.26,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 1.13,
  'winddeg': 18,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 01:00:00'),
  'temp': 305.03,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 1.05,
  'winddeg': 348,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 02:00:00'),
  'temp': 305.86,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 0.37,
  'winddeg': 6,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 03:00:00'),
  'temp': 306.71,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 1.48,
  'winddeg': 89,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 04:00:00'),
  'temp': 307.7,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 1.98,
  'winddeg': 95,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 05:00:00'),
  'temp': 307.38,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 2.52,
  'winddeg': 112,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 06:00:00'),
  'temp': 307.25,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 2.48,
  'winddeg': 107,
  'cloudall': 98,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 07:00:00'),
  'temp': 306.18,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 2.46,
  'winddeg': 126,
  'cloudall': 80,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 08:00:00'),
  'temp': 306.87,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 2.53,
  'winddeg': 149,
  'cloudall': 82,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 09:00:00'),
  'temp': 308,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 3.68,
  'winddeg': 184,
  'cloudall': 81,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 10:00:00'),
  'temp': 308.12,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 56,
  'windspeed': 4.95,
  'winddeg': 187,
  'cloudall': 85,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 11:00:00'),
  'temp': 308.04,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 5.21,
  'winddeg': 211,
  'cloudall': 87,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 12:00:00'),
  'temp': 306.72,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 3.99,
  'winddeg': 168,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 13:00:00'),
  'temp': 305.97,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 3.67,
  'winddeg': 185,
  'cloudall': 98,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 14:00:00'),
  'temp': 306.26,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 3.62,
  'winddeg': 194,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 15:00:00'),
  'temp': 306.03,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 3.32,
  'winddeg': 199,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 16:00:00'),
  'temp': 306.03,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 2.76,
  'winddeg': 201,
  'cloudall': 83,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-05-11 17:00:00'),
  'temp': 305.73,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 3,
  'winddeg': 193,
  'cloudall': 80,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-03 17:00:00'),
  'temp': 301.92,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.57,
  'winddeg': 269,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-03 18:00:00'),
  'temp': 301.9,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.23,
  'winddeg': 267,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-03 19:00:00'),
  'temp': 301.29,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 2.18,
  'winddeg': 275,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-03 20:00:00'),
  'temp': 300.83,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.1,
  'winddeg': 264,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-03 21:00:00'),
  'temp': 301.29,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 1.74,
  'winddeg': 259,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-03 22:00:00'),
  'temp': 300.67,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 1.65,
  'winddeg': 250,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-03 23:00:00'),
  'temp': 300.65,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.33,
  'winddeg': 241,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 00:00:00'),
  'temp': 302.02,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 1.88,
  'winddeg': 224,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 01:00:00'),
  'temp': 303.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 2.41,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 02:00:00'),
  'temp': 304.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 2.84,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 03:00:00'),
  'temp': 306.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 3.17,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 04:00:00'),
  'temp': 306.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 3.63,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 05:00:00'),
  'temp': 307.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 3.57,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 06:00:00'),
  'temp': 308.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 2.98,
  'winddeg': 250,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 07:00:00'),
  'temp': 308.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 3.11,
  'winddeg': 246,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 08:00:00'),
  'temp': 308.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 3,
  'winddeg': 249,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 09:00:00'),
  'temp': 308.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 2.39,
  'winddeg': 257,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 10:00:00'),
  'temp': 308.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.98,
  'winddeg': 262,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 11:00:00'),
  'temp': 308.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 2.52,
  'winddeg': 260,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 12:00:00'),
  'temp': 305.52,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.59,
  'winddeg': 285,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 13:00:00'),
  'temp': 304.98,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 2.95,
  'winddeg': 277,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 14:00:00'),
  'temp': 304.36,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.93,
  'winddeg': 276,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 15:00:00'),
  'temp': 303.91,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.71,
  'winddeg': 277,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 16:00:00'),
  'temp': 302.79,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.59,
  'winddeg': 286,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 17:00:00'),
  'temp': 303.23,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.37,
  'winddeg': 272,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 18:00:00'),
  'temp': 303.21,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.97,
  'winddeg': 254,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 19:00:00'),
  'temp': 302.55,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.71,
  'winddeg': 253,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 20:00:00'),
  'temp': 302.29,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 2.35,
  'winddeg': 253,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 21:00:00'),
  'temp': 301.96,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.68,
  'winddeg': 261,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 22:00:00'),
  'temp': 301.52,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 1.61,
  'winddeg': 246,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-04 23:00:00'),
  'temp': 301.52,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 1.49,
  'winddeg': 236,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 00:00:00'),
  'temp': 302,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 1.53,
  'winddeg': 248,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 01:00:00'),
  'temp': 304.3,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 1.55,
  'winddeg': 255,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 02:00:00'),
  'temp': 303.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 1.79,
  'winddeg': 266,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 03:00:00'),
  'temp': 305.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 1.81,
  'winddeg': 270,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 04:00:00'),
  'temp': 305.99,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 51,
  'windspeed': 2.13,
  'winddeg': 244,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 05:00:00'),
  'temp': 309.11,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 3.06,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 06:00:00'),
  'temp': 309.28,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 5.65,
  'winddeg': 231,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 07:00:00'),
  'temp': 308.53,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 4.53,
  'winddeg': 236,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 08:00:00'),
  'temp': 307.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 4.54,
  'winddeg': 233,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 09:00:00'),
  'temp': 307.99,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 50,
  'windspeed': 5.93,
  'winddeg': 252,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 10:00:00'),
  'temp': 306.54,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 6.09,
  'winddeg': 259,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 11:00:00'),
  'temp': 305,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 6.25,
  'winddeg': 259,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 12:00:00'),
  'temp': 303.91,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.45,
  'winddeg': 235,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 13:00:00'),
  'temp': 302.66,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.66,
  'winddeg': 215,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 14:00:00'),
  'temp': 302.3,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 2.76,
  'winddeg': 222,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 15:00:00'),
  'temp': 303.24,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 2.94,
  'winddeg': 225,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 16:00:00'),
  'temp': 303.29,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 2.65,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 17:00:00'),
  'temp': 302.83,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 2.67,
  'winddeg': 239,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 18:00:00'),
  'temp': 302.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 3.2,
  'winddeg': 234,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 19:00:00'),
  'temp': 301.74,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 2.92,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 20:00:00'),
  'temp': 301.13,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.88,
  'winddeg': 243,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 21:00:00'),
  'temp': 300.2,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.69,
  'winddeg': 244,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 22:00:00'),
  'temp': 299.58,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 2.26,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-05 23:00:00'),
  'temp': 299.56,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.12,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 00:00:00'),
  'temp': 303.67,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 2.5,
  'winddeg': 217,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 01:00:00'),
  'temp': 303.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 3.06,
  'winddeg': 210,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 02:00:00'),
  'temp': 304.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 3.2,
  'winddeg': 222,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 03:00:00'),
  'temp': 305.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 51,
  'windspeed': 3.27,
  'winddeg': 225,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 04:00:00'),
  'temp': 305.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 49,
  'windspeed': 3.48,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 05:00:00'),
  'temp': 305.99,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 48,
  'windspeed': 3.94,
  'winddeg': 215,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 06:00:00'),
  'temp': 308.8,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 4.18,
  'winddeg': 194,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 07:00:00'),
  'temp': 308.37,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 3.78,
  'winddeg': 190,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 08:00:00'),
  'temp': 308.37,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 2.52,
  'winddeg': 192,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 09:00:00'),
  'temp': 306.84,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 1.98,
  'winddeg': 201,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 10:00:00'),
  'temp': 306.36,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.24,
  'winddeg': 187,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 11:00:00'),
  'temp': 304.9,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 4.68,
  'winddeg': 189,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 12:00:00'),
  'temp': 304.04,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 3.86,
  'winddeg': 185,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 13:00:00'),
  'temp': 303.43,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 3.66,
  'winddeg': 185,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 14:00:00'),
  'temp': 303.29,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.38,
  'winddeg': 188,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 15:00:00'),
  'temp': 301.01,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.63,
  'winddeg': 194,
  'cloudall': 78,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 16:00:00'),
  'temp': 301.19,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.83,
  'winddeg': 212,
  'cloudall': 80,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 17:00:00'),
  'temp': 299.92,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.84,
  'winddeg': 229,
  'cloudall': 84,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 18:00:00'),
  'temp': 300.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.8,
  'winddeg': 233,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 19:00:00'),
  'temp': 300.22,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.8,
  'winddeg': 231,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 20:00:00'),
  'temp': 299.76,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.49,
  'winddeg': 229,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 21:00:00'),
  'temp': 299.74,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.43,
  'winddeg': 237,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 22:00:00'),
  'temp': 299.13,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.1,
  'winddeg': 233,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-06 23:00:00'),
  'temp': 299.11,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.06,
  'winddeg': 230,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 00:00:00'),
  'temp': 301.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 2.32,
  'winddeg': 223,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 01:00:00'),
  'temp': 303.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 3,
  'winddeg': 215,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 02:00:00'),
  'temp': 304.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 3.12,
  'winddeg': 217,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 03:00:00'),
  'temp': 305.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 3.52,
  'winddeg': 233,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 04:00:00'),
  'temp': 306.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 50,
  'windspeed': 3.97,
  'winddeg': 247,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 05:00:00'),
  'temp': 309.04,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 46,
  'windspeed': 3.98,
  'winddeg': 248,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 06:00:00'),
  'temp': 306.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 51,
  'windspeed': 4.06,
  'winddeg': 226,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 07:00:00'),
  'temp': 306.11,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 4.49,
  'winddeg': 217,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 08:00:00'),
  'temp': 307.58,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 4.64,
  'winddeg': 218,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 09:00:00'),
  'temp': 305.2,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 52,
  'windspeed': 4.61,
  'winddeg': 236,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 10:00:00'),
  'temp': 307.27,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 3.88,
  'winddeg': 253,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 11:00:00'),
  'temp': 305.29,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.4,
  'winddeg': 259,
  'cloudall': 90,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 12:00:00'),
  'temp': 303.93,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 4.74,
  'winddeg': 265,
  'cloudall': 92,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 13:00:00'),
  'temp': 303.91,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.74,
  'winddeg': 249,
  'cloudall': 54,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 14:00:00'),
  'temp': 303.43,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.7,
  'winddeg': 242,
  'cloudall': 39,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 15:00:00'),
  'temp': 302.64,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 4.03,
  'winddeg': 249,
  'cloudall': 58,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 16:00:00'),
  'temp': 301.01,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 4.09,
  'winddeg': 260,
  'cloudall': 69,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 17:00:00'),
  'temp': 300.83,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 4.04,
  'winddeg': 257,
  'cloudall': 75,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 18:00:00'),
  'temp': 300.83,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.48,
  'winddeg': 253,
  'cloudall': 77,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 19:00:00'),
  'temp': 300.67,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.28,
  'winddeg': 249,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 20:00:00'),
  'temp': 300.67,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.03,
  'winddeg': 244,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 21:00:00'),
  'temp': 300.22,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 2.85,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 22:00:00'),
  'temp': 300.2,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.74,
  'winddeg': 219,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-07 23:00:00'),
  'temp': 300.2,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.92,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 00:00:00'),
  'temp': 301.64,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.24,
  'winddeg': 231,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 01:00:00'),
  'temp': 303.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 3.58,
  'winddeg': 241,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 02:00:00'),
  'temp': 304.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 3.29,
  'winddeg': 248,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 03:00:00'),
  'temp': 307.5,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 3.47,
  'winddeg': 255,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 04:00:00'),
  'temp': 309.17,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 53,
  'windspeed': 3.72,
  'winddeg': 255,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 05:00:00'),
  'temp': 309.28,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 3.69,
  'winddeg': 254,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 06:00:00'),
  'temp': 309.54,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 3.97,
  'winddeg': 244,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 07:00:00'),
  'temp': 309.46,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 53,
  'windspeed': 4.24,
  'winddeg': 213,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 08:00:00'),
  'temp': 306.99,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 5.13,
  'winddeg': 196,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 09:00:00'),
  'temp': 306.99,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 4.56,
  'winddeg': 183,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 10:00:00'),
  'temp': 307.02,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 3.9,
  'winddeg': 198,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 11:00:00'),
  'temp': 305.93,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 2.77,
  'winddeg': 184,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 12:00:00'),
  'temp': 304.46,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.92,
  'winddeg': 208,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 13:00:00'),
  'temp': 303.93,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 2.55,
  'winddeg': 252,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 14:00:00'),
  'temp': 303.31,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.09,
  'winddeg': 266,
  'cloudall': 83,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 15:00:00'),
  'temp': 302.85,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.13,
  'winddeg': 255,
  'cloudall': 85,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 16:00:00'),
  'temp': 302.83,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 3.79,
  'winddeg': 249,
  'cloudall': 83,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 17:00:00'),
  'temp': 302.52,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 3.92,
  'winddeg': 256,
  'cloudall': 85,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 18:00:00'),
  'temp': 301.57,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 3.86,
  'winddeg': 240,
  'cloudall': 89,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 19:00:00'),
  'temp': 301.29,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.95,
  'winddeg': 245,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 20:00:00'),
  'temp': 301.13,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 3.6,
  'winddeg': 243,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 21:00:00'),
  'temp': 301.58,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 3.5,
  'winddeg': 245,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 22:00:00'),
  'temp': 301.66,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.13,
  'winddeg': 249,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-08 23:00:00'),
  'temp': 301.59,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.77,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 00:00:00'),
  'temp': 301.64,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.52,
  'winddeg': 231,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 01:00:00'),
  'temp': 301.89,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 2.9,
  'winddeg': 234,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 02:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 3.61,
  'winddeg': 228,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 03:00:00'),
  'temp': 304.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 3.58,
  'winddeg': 225,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 04:00:00'),
  'temp': 304.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 4.22,
  'winddeg': 224,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 05:00:00'),
  'temp': 305.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 4.68,
  'winddeg': 225,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 06:00:00'),
  'temp': 305.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 5.04,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 07:00:00'),
  'temp': 306.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 4.69,
  'winddeg': 237,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 08:00:00'),
  'temp': 306.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 4.02,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 09:00:00'),
  'temp': 306.09,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 56,
  'windspeed': 6.44,
  'winddeg': 230,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 10:00:00'),
  'temp': 306.52,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 5.1,
  'winddeg': 246,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 11:00:00'),
  'temp': 304.54,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.1,
  'winddeg': 244,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 12:00:00'),
  'temp': 303.75,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.6,
  'winddeg': 215,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 13:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 3.22,
  'winddeg': 233,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 14:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 3.92,
  'winddeg': 250,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 15:00:00'),
  'temp': 305.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 4.06,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 16:00:00'),
  'temp': 304.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 3.47,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 17:00:00'),
  'temp': 304.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 3.38,
  'winddeg': 226,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 18:00:00'),
  'temp': 303.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 3.05,
  'winddeg': 226,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 19:00:00'),
  'temp': 303.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 3.78,
  'winddeg': 229,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 20:00:00'),
  'temp': 303.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.3,
  'winddeg': 231,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 21:00:00'),
  'temp': 302.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.97,
  'winddeg': 225,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 22:00:00'),
  'temp': 302.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.39,
  'winddeg': 226,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-09 23:00:00'),
  'temp': 302.2,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.22,
  'winddeg': 219,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 00:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.89,
  'winddeg': 251,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 01:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 4.53,
  'winddeg': 264,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 02:00:00'),
  'temp': 303.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 5.33,
  'winddeg': 261,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 03:00:00'),
  'temp': 304.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 5.25,
  'winddeg': 240,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 04:00:00'),
  'temp': 303.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 4.99,
  'winddeg': 235,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 05:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.53,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 06:00:00'),
  'temp': 304.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 6.41,
  'winddeg': 225,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 07:00:00'),
  'temp': 304.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 6.41,
  'winddeg': 235,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 08:00:00'),
  'temp': 303.88,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 6.63,
  'winddeg': 241,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 09:00:00'),
  'temp': 303.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 7.05,
  'winddeg': 235,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 10:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 6.13,
  'winddeg': 222,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 11:00:00'),
  'temp': 304.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 6.08,
  'winddeg': 222,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 12:00:00'),
  'temp': 304.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 4.88,
  'winddeg': 213,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 13:00:00'),
  'temp': 303.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.93,
  'winddeg': 202,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 14:00:00'),
  'temp': 302.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 4.88,
  'winddeg': 211,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 15:00:00'),
  'temp': 303.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 4.34,
  'winddeg': 209,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 16:00:00'),
  'temp': 303.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.91,
  'winddeg': 210,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-06-10 17:00:00'),
  'temp': 303.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.57,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-03 17:00:00'),
  'temp': 300.45,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.23,
  'winddeg': 174,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-03 18:00:00'),
  'temp': 300.71,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 2.18,
  'winddeg': 175,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-03 19:00:00'),
  'temp': 298.92,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 2.15,
  'winddeg': 170,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-03 20:00:00'),
  'temp': 298.62,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.04,
  'winddeg': 173,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-03 21:00:00'),
  'temp': 298.65,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.03,
  'winddeg': 171,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-03 22:00:00'),
  'temp': 298.46,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.19,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-03 23:00:00'),
  'temp': 298.57,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.04,
  'winddeg': 176,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 00:00:00'),
  'temp': 299.41,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.5,
  'winddeg': 178,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 01:00:00'),
  'temp': 300.59,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 2.52,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 02:00:00'),
  'temp': 302.19,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.37,
  'winddeg': 164,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 03:00:00'),
  'temp': 301.35,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 1.97,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 04:00:00'),
  'temp': 302.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.13,
  'winddeg': 182,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 05:00:00'),
  'temp': 299.21,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.4,
  'winddeg': 197,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 06:00:00'),
  'temp': 299.24,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.45,
  'winddeg': 205,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 07:00:00'),
  'temp': 300.35,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 3.37,
  'winddeg': 199,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 08:00:00'),
  'temp': 301.41,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 4.16,
  'winddeg': 197,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 09:00:00'),
  'temp': 302.14,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 4.41,
  'winddeg': 189,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 10:00:00'),
  'temp': 302.51,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 4.33,
  'winddeg': 176,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 11:00:00'),
  'temp': 301.63,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 4.19,
  'winddeg': 173,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 12:00:00'),
  'temp': 301.12,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 3.23,
  'winddeg': 173,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 13:00:00'),
  'temp': 300.62,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.9,
  'winddeg': 172,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 14:00:00'),
  'temp': 300.62,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.59,
  'winddeg': 170,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 15:00:00'),
  'temp': 300.67,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.89,
  'winddeg': 167,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 16:00:00'),
  'temp': 300.15,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 2.68,
  'winddeg': 170,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 17:00:00'),
  'temp': 298.85,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 2.78,
  'winddeg': 178,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 18:00:00'),
  'temp': 297.08,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 4.02,
  'winddeg': 177,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 19:00:00'),
  'temp': 296.63,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.93,
  'winddeg': 170,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 20:00:00'),
  'temp': 297,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.37,
  'winddeg': 171,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 21:00:00'),
  'temp': 297.14,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.68,
  'winddeg': 204,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 22:00:00'),
  'temp': 297.27,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.41,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-04 23:00:00'),
  'temp': 297.22,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.4,
  'winddeg': 221,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 00:00:00'),
  'temp': 298.34,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.56,
  'winddeg': 220,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 01:00:00'),
  'temp': 299.21,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 1.48,
  'winddeg': 203,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 02:00:00'),
  'temp': 301.1,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 1.54,
  'winddeg': 207,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 03:00:00'),
  'temp': 302.02,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.32,
  'winddeg': 184,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 04:00:00'),
  'temp': 303.1,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.66,
  'winddeg': 179,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 05:00:00'),
  'temp': 303.97,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.35,
  'winddeg': 177,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 06:00:00'),
  'temp': 303.3,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.42,
  'winddeg': 180,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 07:00:00'),
  'temp': 303.32,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 3.91,
  'winddeg': 180,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 08:00:00'),
  'temp': 304.3,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.27,
  'winddeg': 186,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 09:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 4.03,
  'winddeg': 186,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 10:00:00'),
  'temp': 303.34,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 3.66,
  'winddeg': 187,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 11:00:00'),
  'temp': 303.04,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.93,
  'winddeg': 192,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 12:00:00'),
  'temp': 301.85,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.03,
  'winddeg': 189,
  'cloudall': 92,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 13:00:00'),
  'temp': 300.75,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.12,
  'winddeg': 199,
  'cloudall': 37,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 14:00:00'),
  'temp': 300.38,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 3.14,
  'winddeg': 236,
  'cloudall': 38,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 15:00:00'),
  'temp': 299.62,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.97,
  'winddeg': 249,
  'cloudall': 54,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 16:00:00'),
  'temp': 299.12,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.24,
  'winddeg': 230,
  'cloudall': 59,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 17:00:00'),
  'temp': 299.99,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.45,
  'winddeg': 236,
  'cloudall': 67,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 18:00:00'),
  'temp': 298.61,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 1.64,
  'winddeg': 237,
  'cloudall': 61,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 19:00:00'),
  'temp': 299.85,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.57,
  'winddeg': 249,
  'cloudall': 34,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 20:00:00'),
  'temp': 298.46,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 1.33,
  'winddeg': 258,
  'cloudall': 27,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 21:00:00'),
  'temp': 298.33,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 1.12,
  'winddeg': 252,
  'cloudall': 25,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 22:00:00'),
  'temp': 298.33,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 1.43,
  'winddeg': 240,
  'cloudall': 37,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-05 23:00:00'),
  'temp': 298.84,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 1.3,
  'winddeg': 265,
  'cloudall': 47,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 00:00:00'),
  'temp': 300.25,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 1.15,
  'winddeg': 268,
  'cloudall': 77,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 01:00:00'),
  'temp': 301.99,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 1.39,
  'winddeg': 278,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 02:00:00'),
  'temp': 302.02,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.97,
  'winddeg': 269,
  'cloudall': 60,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 03:00:00'),
  'temp': 303.49,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.54,
  'winddeg': 263,
  'cloudall': 73,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 04:00:00'),
  'temp': 304.17,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 2.85,
  'winddeg': 260,
  'cloudall': 77,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 05:00:00'),
  'temp': 305.25,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 2.88,
  'winddeg': 265,
  'cloudall': 82,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 06:00:00'),
  'temp': 306.31,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 2.34,
  'winddeg': 242,
  'cloudall': 88,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 07:00:00'),
  'temp': 307.48,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.41,
  'winddeg': 236,
  'cloudall': 89,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 08:00:00'),
  'temp': 305.81,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 3.19,
  'winddeg': 214,
  'cloudall': 74,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 09:00:00'),
  'temp': 306.29,
  'pressure': 1002,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 4.03,
  'winddeg': 195,
  'cloudall': 81,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 10:00:00'),
  'temp': 304.78,
  'pressure': 1002,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 4.48,
  'winddeg': 184,
  'cloudall': 85,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 11:00:00'),
  'temp': 304.74,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 5.11,
  'winddeg': 189,
  'cloudall': 88,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 12:00:00'),
  'temp': 302.05,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 4.14,
  'winddeg': 177,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 13:00:00'),
  'temp': 301.32,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.88,
  'winddeg': 189,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 14:00:00'),
  'temp': 300.81,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.84,
  'winddeg': 197,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 15:00:00'),
  'temp': 300.82,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.29,
  'winddeg': 199,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 16:00:00'),
  'temp': 301.26,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.43,
  'winddeg': 196,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 17:00:00'),
  'temp': 301.24,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.51,
  'winddeg': 195,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 18:00:00'),
  'temp': 300.67,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.23,
  'winddeg': 189,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 19:00:00'),
  'temp': 300.75,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.03,
  'winddeg': 203,
  'cloudall': 84,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 20:00:00'),
  'temp': 300.3,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 1.54,
  'winddeg': 213,
  'cloudall': 85,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 21:00:00'),
  'temp': 300.94,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.56,
  'winddeg': 246,
  'cloudall': 70,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 22:00:00'),
  'temp': 299.71,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 1.65,
  'winddeg': 262,
  'cloudall': 68,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-06 23:00:00'),
  'temp': 300.92,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.91,
  'winddeg': 262,
  'cloudall': 65,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 00:00:00'),
  'temp': 301.31,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 1.72,
  'winddeg': 272,
  'cloudall': 80,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 01:00:00'),
  'temp': 302.8,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 1.77,
  'winddeg': 273,
  'cloudall': 92,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 02:00:00'),
  'temp': 303.36,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 1.88,
  'winddeg': 277,
  'cloudall': 62,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 03:00:00'),
  'temp': 303.71,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 1.74,
  'winddeg': 264,
  'cloudall': 51,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 04:00:00'),
  'temp': 305.47,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 1.23,
  'winddeg': 261,
  'cloudall': 57,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 05:00:00'),
  'temp': 306.33,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 1.57,
  'winddeg': 259,
  'cloudall': 66,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 06:00:00'),
  'temp': 306.86,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 1.49,
  'winddeg': 218,
  'cloudall': 81,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 07:00:00'),
  'temp': 307.21,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 2.12,
  'winddeg': 191,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 08:00:00'),
  'temp': 307.1,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 3.53,
  'winddeg': 187,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 09:00:00'),
  'temp': 306.16,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 4.34,
  'winddeg': 182,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 10:00:00'),
  'temp': 305.73,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 4.47,
  'winddeg': 174,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 11:00:00'),
  'temp': 304.07,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 3.88,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 12:00:00'),
  'temp': 303.32,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.64,
  'winddeg': 170,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 13:00:00'),
  'temp': 302.81,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 3.74,
  'winddeg': 174,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 14:00:00'),
  'temp': 302.73,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 3.66,
  'winddeg': 176,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 15:00:00'),
  'temp': 302.73,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.67,
  'winddeg': 179,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 16:00:00'),
  'temp': 302.23,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 3.65,
  'winddeg': 174,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 17:00:00'),
  'temp': 302.14,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 3.57,
  'winddeg': 168,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 18:00:00'),
  'temp': 302,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.28,
  'winddeg': 163,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 19:00:00'),
  'temp': 301.86,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.2,
  'winddeg': 161,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 20:00:00'),
  'temp': 301.05,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.94,
  'winddeg': 160,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 21:00:00'),
  'temp': 300.91,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.66,
  'winddeg': 158,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 22:00:00'),
  'temp': 300.31,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 2.44,
  'winddeg': 156,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-07 23:00:00'),
  'temp': 300.17,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 1.87,
  'winddeg': 145,
  'cloudall': 93,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 00:00:00'),
  'temp': 300.66,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 2.06,
  'winddeg': 137,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 01:00:00'),
  'temp': 302,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 2.29,
  'winddeg': 138,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 02:00:00'),
  'temp': 302.3,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.66,
  'winddeg': 140,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 03:00:00'),
  'temp': 302.99,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.86,
  'winddeg': 157,
  'cloudall': 78,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 04:00:00'),
  'temp': 305.03,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 3.03,
  'winddeg': 161,
  'cloudall': 66,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 05:00:00'),
  'temp': 306.47,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.35,
  'winddeg': 162,
  'cloudall': 59,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 06:00:00'),
  'temp': 305.57,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.77,
  'winddeg': 179,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 07:00:00'),
  'temp': 306.82,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 4.02,
  'winddeg': 174,
  'cloudall': 98,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 08:00:00'),
  'temp': 306.08,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.03,
  'winddeg': 172,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 09:00:00'),
  'temp': 305.68,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 4.01,
  'winddeg': 170,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 10:00:00'),
  'temp': 305.21,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 4.27,
  'winddeg': 163,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 11:00:00'),
  'temp': 304.06,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 4.98,
  'winddeg': 161,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 12:00:00'),
  'temp': 303.31,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.47,
  'winddeg': 159,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 13:00:00'),
  'temp': 302.72,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 4.56,
  'winddeg': 167,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 14:00:00'),
  'temp': 302.36,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 4.94,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 15:00:00'),
  'temp': 302.28,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 5.2,
  'winddeg': 169,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 16:00:00'),
  'temp': 302.41,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 5.01,
  'winddeg': 174,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 17:00:00'),
  'temp': 301.4,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 4.56,
  'winddeg': 177,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 18:00:00'),
  'temp': 300.6,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 3.97,
  'winddeg': 179,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 19:00:00'),
  'temp': 300.43,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 4.2,
  'winddeg': 177,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 20:00:00'),
  'temp': 300.3,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 4.37,
  'winddeg': 175,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 21:00:00'),
  'temp': 300.15,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 4.05,
  'winddeg': 175,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 22:00:00'),
  'temp': 301.35,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 4.18,
  'winddeg': 173,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-08 23:00:00'),
  'temp': 301.33,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 3.84,
  'winddeg': 191,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 00:00:00'),
  'temp': 301.33,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 3.33,
  'winddeg': 181,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 01:00:00'),
  'temp': 302.8,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.1,
  'winddeg': 179,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 02:00:00'),
  'temp': 303.05,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 3.47,
  'winddeg': 179,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 03:00:00'),
  'temp': 303.35,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 3.76,
  'winddeg': 181,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 04:00:00'),
  'temp': 304.92,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 3.7,
  'winddeg': 183,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 05:00:00'),
  'temp': 303.24,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.85,
  'winddeg': 184,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 06:00:00'),
  'temp': 304.35,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 52,
  'windspeed': 2.9,
  'winddeg': 191,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 07:00:00'),
  'temp': 306.94,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.16,
  'winddeg': 178,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 08:00:00'),
  'temp': 307.08,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 3.75,
  'winddeg': 166,
  'cloudall': 98,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 09:00:00'),
  'temp': 307.81,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.77,
  'winddeg': 156,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 10:00:00'),
  'temp': 306.79,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 4.17,
  'winddeg': 157,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 11:00:00'),
  'temp': 304.73,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 4.57,
  'winddeg': 164,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 12:00:00'),
  'temp': 303.47,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 3.87,
  'winddeg': 172,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 13:00:00'),
  'temp': 303.1,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.65,
  'winddeg': 181,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 14:00:00'),
  'temp': 302.73,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 2.99,
  'winddeg': 182,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 15:00:00'),
  'temp': 302.36,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.62,
  'winddeg': 181,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 16:00:00'),
  'temp': 301.92,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 3.93,
  'winddeg': 172,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 17:00:00'),
  'temp': 301.05,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 3.86,
  'winddeg': 172,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 18:00:00'),
  'temp': 300.25,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.14,
  'winddeg': 157,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 19:00:00'),
  'temp': 300.39,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.11,
  'winddeg': 147,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 20:00:00'),
  'temp': 300.38,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 2.75,
  'winddeg': 163,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 21:00:00'),
  'temp': 300.3,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 3.07,
  'winddeg': 163,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 22:00:00'),
  'temp': 300.02,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 2.98,
  'winddeg': 161,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-09 23:00:00'),
  'temp': 300.31,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 2.45,
  'winddeg': 158,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 00:00:00'),
  'temp': 300.32,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 2.36,
  'winddeg': 149,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 01:00:00'),
  'temp': 303.03,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.37,
  'winddeg': 154,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 02:00:00'),
  'temp': 302.63,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 3.77,
  'winddeg': 165,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 03:00:00'),
  'temp': 302.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 4.21,
  'winddeg': 169,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 04:00:00'),
  'temp': 305.08,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 5,
  'winddeg': 174,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 05:00:00'),
  'temp': 303.42,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 5.23,
  'winddeg': 182,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 06:00:00'),
  'temp': 305.55,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 4.44,
  'winddeg': 192,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 07:00:00'),
  'temp': 308.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 4.47,
  'winddeg': 191,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 08:00:00'),
  'temp': 303.87,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 3.8,
  'winddeg': 184,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 09:00:00'),
  'temp': 305.4,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.59,
  'winddeg': 175,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 10:00:00'),
  'temp': 304.71,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 3.93,
  'winddeg': 162,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 11:00:00'),
  'temp': 303.88,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 4.69,
  'winddeg': 173,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 12:00:00'),
  'temp': 302.73,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.88,
  'winddeg': 185,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 13:00:00'),
  'temp': 302.59,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 3.76,
  'winddeg': 164,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 14:00:00'),
  'temp': 302.28,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.79,
  'winddeg': 180,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 15:00:00'),
  'temp': 299.69,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 3.33,
  'winddeg': 185,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 16:00:00'),
  'temp': 299.77,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 3.17,
  'winddeg': 187,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-07-10 17:00:00'),
  'temp': 300.46,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 2.63,
  'winddeg': 202,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-02 17:00:00'),
  'temp': 301.65,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 1.7,
  'winddeg': 166,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-02 18:00:00'),
  'temp': 301.65,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.35,
  'winddeg': 183,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-02 19:00:00'),
  'temp': 301.51,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.54,
  'winddeg': 180,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-02 20:00:00'),
  'temp': 300.22,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.74,
  'winddeg': 161,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-02 21:00:00'),
  'temp': 299.96,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2,
  'winddeg': 123,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-02 22:00:00'),
  'temp': 300.28,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.22,
  'winddeg': 101,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-02 23:00:00'),
  'temp': 299.8,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.86,
  'winddeg': 89,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 00:00:00'),
  'temp': 299.86,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 1.68,
  'winddeg': 64,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 01:00:00'),
  'temp': 300.25,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.09,
  'winddeg': 86,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 02:00:00'),
  'temp': 301.39,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 3.12,
  'winddeg': 85,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 03:00:00'),
  'temp': 302.67,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 2.07,
  'winddeg': 98,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 04:00:00'),
  'temp': 303.71,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 1.14,
  'winddeg': 176,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 05:00:00'),
  'temp': 303.81,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 1.05,
  'winddeg': 187,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 06:00:00'),
  'temp': 304.79,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.31,
  'winddeg': 252,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 07:00:00'),
  'temp': 304.4,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.8,
  'winddeg': 265,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 08:00:00'),
  'temp': 302.08,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 2.62,
  'winddeg': 275,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 09:00:00'),
  'temp': 300.55,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 2.63,
  'winddeg': 304,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 10:00:00'),
  'temp': 302.2,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.25,
  'winddeg': 350,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 11:00:00'),
  'temp': 301.3,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.07,
  'winddeg': 32,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 12:00:00'),
  'temp': 302.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 1.51,
  'winddeg': 10,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 13:00:00'),
  'temp': 301.78,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 0.97,
  'winddeg': 67,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 14:00:00'),
  'temp': 300.9,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 0.8,
  'winddeg': 45,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 15:00:00'),
  'temp': 297.68,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 0.38,
  'winddeg': 325,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 16:00:00'),
  'temp': 297.31,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 0.31,
  'winddeg': 153,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 17:00:00'),
  'temp': 297.68,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 0.84,
  'winddeg': 210,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 18:00:00'),
  'temp': 297.72,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 0.52,
  'winddeg': 317,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 19:00:00'),
  'temp': 297.31,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 0.2,
  'winddeg': 220,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 20:00:00'),
  'temp': 297.56,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 0.43,
  'winddeg': 216,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 21:00:00'),
  'temp': 297.06,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 0.77,
  'winddeg': 12,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 22:00:00'),
  'temp': 297.02,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.51,
  'winddeg': 39,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-03 23:00:00'),
  'temp': 297.06,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.37,
  'winddeg': 10,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 00:00:00'),
  'temp': 297.08,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.11,
  'winddeg': 80,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 01:00:00'),
  'temp': 297.43,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.65,
  'winddeg': 107,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 02:00:00'),
  'temp': 299.63,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 1.67,
  'winddeg': 107,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 03:00:00'),
  'temp': 300.7,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 0.7,
  'winddeg': 58,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 04:00:00'),
  'temp': 303.05,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 0.65,
  'winddeg': 346,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 05:00:00'),
  'temp': 303.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 0.49,
  'winddeg': 338,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 06:00:00'),
  'temp': 305.25,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 1.06,
  'winddeg': 196,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 07:00:00'),
  'temp': 305.16,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 0.97,
  'winddeg': 198,
  'cloudall': 90,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 08:00:00'),
  'temp': 304.77,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 1.15,
  'winddeg': 226,
  'cloudall': 90,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 09:00:00'),
  'temp': 303.84,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.16,
  'winddeg': 256,
  'cloudall': 93,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 10:00:00'),
  'temp': 302.87,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.87,
  'winddeg': 274,
  'cloudall': 95,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 11:00:00'),
  'temp': 302.13,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 2.51,
  'winddeg': 269,
  'cloudall': 96,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 12:00:00'),
  'temp': 301.91,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.38,
  'winddeg': 209,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 13:00:00'),
  'temp': 301.4,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.27,
  'winddeg': 212,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 14:00:00'),
  'temp': 299.29,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 2.18,
  'winddeg': 189,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 15:00:00'),
  'temp': 297.66,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 1.96,
  'winddeg': 196,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 16:00:00'),
  'temp': 298.52,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.79,
  'winddeg': 201,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 17:00:00'),
  'temp': 297.68,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.1,
  'winddeg': 210,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 18:00:00'),
  'temp': 297.71,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.61,
  'winddeg': 237,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 19:00:00'),
  'temp': 297.37,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.41,
  'winddeg': 245,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 20:00:00'),
  'temp': 297.7,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.3,
  'winddeg': 250,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 21:00:00'),
  'temp': 298.02,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.94,
  'winddeg': 250,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 22:00:00'),
  'temp': 298.02,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.64,
  'winddeg': 249,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-04 23:00:00'),
  'temp': 297.72,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.45,
  'winddeg': 263,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 00:00:00'),
  'temp': 297.73,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.86,
  'winddeg': 171,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 01:00:00'),
  'temp': 298.42,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.19,
  'winddeg': 181,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 02:00:00'),
  'temp': 300.66,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 1.23,
  'winddeg': 207,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 03:00:00'),
  'temp': 302.41,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 1.5,
  'winddeg': 216,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 04:00:00'),
  'temp': 303.83,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.16,
  'winddeg': 240,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 05:00:00'),
  'temp': 304.42,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 1.02,
  'winddeg': 209,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 06:00:00'),
  'temp': 304.24,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 2.25,
  'winddeg': 191,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 07:00:00'),
  'temp': 304.66,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 2.58,
  'winddeg': 187,
  'cloudall': 81,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 08:00:00'),
  'temp': 304.66,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 1.54,
  'winddeg': 221,
  'cloudall': 85,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 09:00:00'),
  'temp': 304.87,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 1.24,
  'winddeg': 247,
  'cloudall': 87,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 10:00:00'),
  'temp': 305.18,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 1.88,
  'winddeg': 215,
  'cloudall': 90,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 11:00:00'),
  'temp': 304.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.58,
  'winddeg': 218,
  'cloudall': 92,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 12:00:00'),
  'temp': 302,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.8,
  'winddeg': 183,
  'cloudall': 74,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 13:00:00'),
  'temp': 301.73,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.5,
  'winddeg': 182,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 14:00:00'),
  'temp': 301.94,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.18,
  'winddeg': 174,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 15:00:00'),
  'temp': 301.58,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.07,
  'winddeg': 170,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 16:00:00'),
  'temp': 301.24,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.07,
  'winddeg': 182,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 17:00:00'),
  'temp': 301.26,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.29,
  'winddeg': 196,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 18:00:00'),
  'temp': 300.17,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.74,
  'winddeg': 230,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 19:00:00'),
  'temp': 298.8,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 2.21,
  'winddeg': 244,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 20:00:00'),
  'temp': 299.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.11,
  'winddeg': 256,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 21:00:00'),
  'temp': 299.49,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.04,
  'winddeg': 246,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 22:00:00'),
  'temp': 299.46,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.68,
  'winddeg': 253,
  'cloudall': 92,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-05 23:00:00'),
  'temp': 299.17,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.72,
  'winddeg': 250,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 00:00:00'),
  'temp': 299.47,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.66,
  'winddeg': 271,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 01:00:00'),
  'temp': 300.81,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 2.12,
  'winddeg': 285,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 02:00:00'),
  'temp': 302.29,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.51,
  'winddeg': 291,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 03:00:00'),
  'temp': 303.7,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.06,
  'winddeg': 284,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 04:00:00'),
  'temp': 304.84,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 3.29,
  'winddeg': 283,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 05:00:00'),
  'temp': 305.47,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 3.7,
  'winddeg': 278,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 06:00:00'),
  'temp': 305.95,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 3.94,
  'winddeg': 279,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 07:00:00'),
  'temp': 306.55,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.97,
  'winddeg': 265,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 08:00:00'),
  'temp': 306.28,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.99,
  'winddeg': 266,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 09:00:00'),
  'temp': 306.16,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 3.03,
  'winddeg': 268,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 10:00:00'),
  'temp': 306.32,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 2.8,
  'winddeg': 266,
  'cloudall': 78,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 11:00:00'),
  'temp': 306.18,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.36,
  'winddeg': 240,
  'cloudall': 68,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 12:00:00'),
  'temp': 305.02,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 3.62,
  'winddeg': 208,
  'cloudall': 65,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 13:00:00'),
  'temp': 301.9,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 3.67,
  'winddeg': 197,
  'cloudall': 46,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 14:00:00'),
  'temp': 303.33,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 3.08,
  'winddeg': 188,
  'cloudall': 73,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 15:00:00'),
  'temp': 297.82,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.8,
  'winddeg': 186,
  'cloudall': 82,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 16:00:00'),
  'temp': 298.16,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.4,
  'winddeg': 194,
  'cloudall': 86,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 17:00:00'),
  'temp': 298.49,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.09,
  'winddeg': 212,
  'cloudall': 89,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 18:00:00'),
  'temp': 298.48,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.04,
  'winddeg': 235,
  'cloudall': 88,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 19:00:00'),
  'temp': 298.45,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.14,
  'winddeg': 255,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 20:00:00'),
  'temp': 298.84,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.12,
  'winddeg': 272,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 21:00:00'),
  'temp': 298.45,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.05,
  'winddeg': 271,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 22:00:00'),
  'temp': 298.8,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.77,
  'winddeg': 270,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-06 23:00:00'),
  'temp': 298.8,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.64,
  'winddeg': 282,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 00:00:00'),
  'temp': 298.8,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.59,
  'winddeg': 287,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 01:00:00'),
  'temp': 299.58,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 1.91,
  'winddeg': 277,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 02:00:00'),
  'temp': 301.74,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 2.2,
  'winddeg': 272,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 03:00:00'),
  'temp': 303.47,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.15,
  'winddeg': 267,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 04:00:00'),
  'temp': 303.77,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 2.46,
  'winddeg': 271,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 05:00:00'),
  'temp': 305.21,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 2.62,
  'winddeg': 269,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 06:00:00'),
  'temp': 305.54,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.73,
  'winddeg': 251,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 07:00:00'),
  'temp': 304.83,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.96,
  'winddeg': 247,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 08:00:00'),
  'temp': 305.03,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 3.29,
  'winddeg': 236,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 09:00:00'),
  'temp': 305.7,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 2.91,
  'winddeg': 210,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 10:00:00'),
  'temp': 305.65,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 2.77,
  'winddeg': 176,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 11:00:00'),
  'temp': 304.67,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.95,
  'winddeg': 168,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 12:00:00'),
  'temp': 303.1,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 3.86,
  'winddeg': 182,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 13:00:00'),
  'temp': 303.1,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.97,
  'winddeg': 185,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 14:00:00'),
  'temp': 301.11,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.38,
  'winddeg': 184,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 15:00:00'),
  'temp': 300.26,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 3.09,
  'winddeg': 183,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 16:00:00'),
  'temp': 299.95,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 3.4,
  'winddeg': 183,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 17:00:00'),
  'temp': 299.58,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 3.32,
  'winddeg': 182,
  'cloudall': 91,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 18:00:00'),
  'temp': 299.58,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.21,
  'winddeg': 195,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 19:00:00'),
  'temp': 299.58,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 1.78,
  'winddeg': 192,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 20:00:00'),
  'temp': 299.58,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 1.32,
  'winddeg': 189,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 21:00:00'),
  'temp': 299.2,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 0.87,
  'winddeg': 187,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 22:00:00'),
  'temp': 299.2,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 0.9,
  'winddeg': 195,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-07 23:00:00'),
  'temp': 299.17,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 0.81,
  'winddeg': 217,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 00:00:00'),
  'temp': 299.17,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 97,
  'windspeed': 0.88,
  'winddeg': 255,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 01:00:00'),
  'temp': 300.24,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 1.25,
  'winddeg': 273,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 02:00:00'),
  'temp': 300.96,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 1.43,
  'winddeg': 286,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 03:00:00'),
  'temp': 303.48,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 1.11,
  'winddeg': 282,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 04:00:00'),
  'temp': 304.55,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 1.77,
  'winddeg': 283,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 05:00:00'),
  'temp': 305.63,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 2.1,
  'winddeg': 274,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 06:00:00'),
  'temp': 306.33,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 2.19,
  'winddeg': 272,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 07:00:00'),
  'temp': 305.17,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 2.39,
  'winddeg': 254,
  'cloudall': 57,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 08:00:00'),
  'temp': 308.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 2.31,
  'winddeg': 241,
  'cloudall': 74,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 09:00:00'),
  'temp': 307.21,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.12,
  'winddeg': 231,
  'cloudall': 65,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 10:00:00'),
  'temp': 306.86,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.49,
  'winddeg': 208,
  'cloudall': 70,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 11:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 3.15,
  'winddeg': 186,
  'cloudall': 72,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 12:00:00'),
  'temp': 303.77,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.02,
  'winddeg': 163,
  'cloudall': 89,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 13:00:00'),
  'temp': 303.1,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 4.04,
  'winddeg': 171,
  'cloudall': 14,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 14:00:00'),
  'temp': 302.72,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 3.65,
  'winddeg': 182,
  'cloudall': 17,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 15:00:00'),
  'temp': 302.72,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.52,
  'winddeg': 187,
  'cloudall': 36,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 16:00:00'),
  'temp': 302.02,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.69,
  'winddeg': 190,
  'cloudall': 45,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 17:00:00'),
  'temp': 302.02,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 4.03,
  'winddeg': 184,
  'cloudall': 42,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 18:00:00'),
  'temp': 302.02,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.22,
  'winddeg': 185,
  'cloudall': 54,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 19:00:00'),
  'temp': 302.03,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 2.71,
  'winddeg': 189,
  'cloudall': 10,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 20:00:00'),
  'temp': 301.65,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.12,
  'winddeg': 194,
  'cloudall': 10,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 21:00:00'),
  'temp': 301.32,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 2.02,
  'winddeg': 172,
  'cloudall': 10,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 22:00:00'),
  'temp': 301.32,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.01,
  'winddeg': 181,
  'cloudall': 10,
  'weathermain': 'Clear'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-08 23:00:00'),
  'temp': 300.98,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 1.54,
  'winddeg': 184,
  'cloudall': 11,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 00:00:00'),
  'temp': 301.99,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.21,
  'winddeg': 191,
  'cloudall': 90,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 01:00:00'),
  'temp': 302.77,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.04,
  'winddeg': 194,
  'cloudall': 91,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 02:00:00'),
  'temp': 304.73,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 2.79,
  'winddeg': 207,
  'cloudall': 60,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 03:00:00'),
  'temp': 305.25,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 2.63,
  'winddeg': 222,
  'cloudall': 54,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 04:00:00'),
  'temp': 305.99,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.24,
  'winddeg': 213,
  'cloudall': 47,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 05:00:00'),
  'temp': 307.1,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 2.27,
  'winddeg': 218,
  'cloudall': 45,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 06:00:00'),
  'temp': 307.4,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 1.91,
  'winddeg': 242,
  'cloudall': 34,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 07:00:00'),
  'temp': 308.48,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 56,
  'windspeed': 2.09,
  'winddeg': 229,
  'cloudall': 42,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 08:00:00'),
  'temp': 307.73,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 2.65,
  'winddeg': 201,
  'cloudall': 68,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 09:00:00'),
  'temp': 307.34,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 3.67,
  'winddeg': 177,
  'cloudall': 79,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 10:00:00'),
  'temp': 306.41,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 4.12,
  'winddeg': 161,
  'cloudall': 84,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 11:00:00'),
  'temp': 304.77,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 4.54,
  'winddeg': 163,
  'cloudall': 85,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 12:00:00'),
  'temp': 304.76,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 4.4,
  'winddeg': 170,
  'cloudall': 72,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 13:00:00'),
  'temp': 304.06,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 4.27,
  'winddeg': 173,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 14:00:00'),
  'temp': 303.39,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 4.21,
  'winddeg': 183,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 15:00:00'),
  'temp': 303.39,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 4.83,
  'winddeg': 182,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 16:00:00'),
  'temp': 302.72,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 4.41,
  'winddeg': 179,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-08-09 17:00:00'),
  'temp': 302.68,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 4.12,
  'winddeg': 179,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-01 17:00:00'),
  'temp': 298.13,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 2.63,
  'winddeg': 282,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-01 18:00:00'),
  'temp': 297.75,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 98,
  'windspeed': 2.09,
  'winddeg': 297,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-01 19:00:00'),
  'temp': 297.72,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.9,
  'winddeg': 335,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-01 20:00:00'),
  'temp': 298.1,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.35,
  'winddeg': 343,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-01 21:00:00'),
  'temp': 298.39,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.86,
  'winddeg': 308,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-01 22:00:00'),
  'temp': 298.77,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.22,
  'winddeg': 301,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-01 23:00:00'),
  'temp': 298.77,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 2.18,
  'winddeg': 310,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 00:00:00'),
  'temp': 298.8,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 99,
  'windspeed': 1.86,
  'winddeg': 331,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 01:00:00'),
  'temp': 299.46,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.64,
  'winddeg': 318,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 02:00:00'),
  'temp': 299.87,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.23,
  'winddeg': 315,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 03:00:00'),
  'temp': 301.99,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.65,
  'winddeg': 273,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 04:00:00'),
  'temp': 302.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 1.64,
  'winddeg': 288,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 05:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.54,
  'winddeg': 314,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 06:00:00'),
  'temp': 303.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 2.59,
  'winddeg': 310,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 07:00:00'),
  'temp': 304.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.43,
  'winddeg': 307,
  'cloudall': 80,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 08:00:00'),
  'temp': 303.99,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 2.07,
  'winddeg': 291,
  'cloudall': 90,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 09:00:00'),
  'temp': 302.63,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 2.31,
  'winddeg': 255,
  'cloudall': 93,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 10:00:00'),
  'temp': 303.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 2.22,
  'winddeg': 224,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 11:00:00'),
  'temp': 302.99,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.53,
  'winddeg': 190,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 12:00:00'),
  'temp': 302.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.5,
  'winddeg': 196,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 13:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.89,
  'winddeg': 189,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 14:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.26,
  'winddeg': 192,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 15:00:00'),
  'temp': 302.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.76,
  'winddeg': 200,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 16:00:00'),
  'temp': 302.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.86,
  'winddeg': 214,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 17:00:00'),
  'temp': 301.37,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.68,
  'winddeg': 255,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 18:00:00'),
  'temp': 301.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.04,
  'winddeg': 248,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 19:00:00'),
  'temp': 300.88,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.2,
  'winddeg': 250,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 20:00:00'),
  'temp': 299.99,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.4,
  'winddeg': 252,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 21:00:00'),
  'temp': 299.99,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.37,
  'winddeg': 274,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 22:00:00'),
  'temp': 299.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.31,
  'winddeg': 284,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-02 23:00:00'),
  'temp': 300.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.34,
  'winddeg': 259,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 00:00:00'),
  'temp': 300.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.58,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 01:00:00'),
  'temp': 300.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 3.22,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 02:00:00'),
  'temp': 301.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 3.41,
  'winddeg': 233,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 03:00:00'),
  'temp': 302.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 3.08,
  'winddeg': 234,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 04:00:00'),
  'temp': 302.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 3.07,
  'winddeg': 223,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 05:00:00'),
  'temp': 301.88,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 2.98,
  'winddeg': 219,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 06:00:00'),
  'temp': 301.88,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 2.49,
  'winddeg': 195,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 07:00:00'),
  'temp': 301.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 4.16,
  'winddeg': 229,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 08:00:00'),
  'temp': 304.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 3.5,
  'winddeg': 231,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 09:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 3.48,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 10:00:00'),
  'temp': 304.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 2.99,
  'winddeg': 218,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 11:00:00'),
  'temp': 303.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.3,
  'winddeg': 212,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 12:00:00'),
  'temp': 300.9,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 1.69,
  'winddeg': 189,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 13:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.41,
  'winddeg': 220,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 14:00:00'),
  'temp': 302.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 1.66,
  'winddeg': 257,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 15:00:00'),
  'temp': 302.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 2.28,
  'winddeg': 262,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 16:00:00'),
  'temp': 299.99,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.28,
  'winddeg': 252,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 17:00:00'),
  'temp': 299.99,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.65,
  'winddeg': 251,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 18:00:00'),
  'temp': 299.99,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.86,
  'winddeg': 245,
  'cloudall': 96,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 19:00:00'),
  'temp': 300.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.68,
  'winddeg': 245,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 20:00:00'),
  'temp': 300.88,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.67,
  'winddeg': 244,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 21:00:00'),
  'temp': 299.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.84,
  'winddeg': 237,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 22:00:00'),
  'temp': 299.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 3.16,
  'winddeg': 223,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-03 23:00:00'),
  'temp': 299.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.58,
  'winddeg': 222,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 00:00:00'),
  'temp': 299.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.39,
  'winddeg': 220,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 01:00:00'),
  'temp': 299.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.92,
  'winddeg': 206,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 02:00:00'),
  'temp': 301.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.74,
  'winddeg': 204,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 03:00:00'),
  'temp': 302.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 4.48,
  'winddeg': 209,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 04:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.68,
  'winddeg': 208,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 05:00:00'),
  'temp': 303.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 5.22,
  'winddeg': 214,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 06:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 4.65,
  'winddeg': 220,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 07:00:00'),
  'temp': 305.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 4.75,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 08:00:00'),
  'temp': 305.09,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 5.4,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 09:00:00'),
  'temp': 305.09,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 4,
  'winddeg': 231,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 10:00:00'),
  'temp': 306.09,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.14,
  'winddeg': 230,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 11:00:00'),
  'temp': 305.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 3.53,
  'winddeg': 242,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 12:00:00'),
  'temp': 304.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 3.56,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 13:00:00'),
  'temp': 304.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 3.57,
  'winddeg': 236,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 14:00:00'),
  'temp': 304.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.96,
  'winddeg': 239,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 15:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.91,
  'winddeg': 251,
  'cloudall': 72,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 16:00:00'),
  'temp': 300.86,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.87,
  'winddeg': 238,
  'cloudall': 68,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 17:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.02,
  'winddeg': 238,
  'cloudall': 66,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 18:00:00'),
  'temp': 302.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.4,
  'winddeg': 250,
  'cloudall': 83,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 19:00:00'),
  'temp': 302.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 3.09,
  'winddeg': 247,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 20:00:00'),
  'temp': 301.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.96,
  'winddeg': 245,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 21:00:00'),
  'temp': 301.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.66,
  'winddeg': 238,
  'cloudall': 94,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 22:00:00'),
  'temp': 301.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.3,
  'winddeg': 234,
  'cloudall': 83,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-04 23:00:00'),
  'temp': 300.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.11,
  'winddeg': 240,
  'cloudall': 75,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 00:00:00'),
  'temp': 300.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.4,
  'winddeg': 242,
  'cloudall': 89,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 01:00:00'),
  'temp': 301.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 2.98,
  'winddeg': 242,
  'cloudall': 87,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 02:00:00'),
  'temp': 303.11,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 3.86,
  'winddeg': 249,
  'cloudall': 85,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 03:00:00'),
  'temp': 304.11,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 4.74,
  'winddeg': 258,
  'cloudall': 88,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 04:00:00'),
  'temp': 306.61,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 50,
  'windspeed': 5.32,
  'winddeg': 261,
  'cloudall': 77,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 05:00:00'),
  'temp': 307.25,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 49,
  'windspeed': 5.96,
  'winddeg': 269,
  'cloudall': 70,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 06:00:00'),
  'temp': 307.91,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 48,
  'windspeed': 5.68,
  'winddeg': 278,
  'cloudall': 86,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 07:00:00'),
  'temp': 308.15,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 47,
  'windspeed': 5.1,
  'winddeg': 284,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 08:00:00'),
  'temp': 306.99,
  'pressure': 1002,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 3.75,
  'winddeg': 277,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 09:00:00'),
  'temp': 306.09,
  'pressure': 1002,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.68,
  'winddeg': 285,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 10:00:00'),
  'temp': 303.99,
  'pressure': 1002,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 2.81,
  'winddeg': 254,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 11:00:00'),
  'temp': 304.88,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 4.17,
  'winddeg': 250,
  'cloudall': 92,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 12:00:00'),
  'temp': 304.88,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 6,
  'winddeg': 251,
  'cloudall': 80,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 13:00:00'),
  'temp': 303.99,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 5.09,
  'winddeg': 257,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 14:00:00'),
  'temp': 303.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 4.49,
  'winddeg': 261,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 15:00:00'),
  'temp': 303.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 4.04,
  'winddeg': 262,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 16:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 3.32,
  'winddeg': 267,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 17:00:00'),
  'temp': 302.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 3.26,
  'winddeg': 260,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 18:00:00'),
  'temp': 302.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.89,
  'winddeg': 268,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 19:00:00'),
  'temp': 302.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.45,
  'winddeg': 259,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 20:00:00'),
  'temp': 301.99,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.45,
  'winddeg': 260,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 21:00:00'),
  'temp': 301.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.28,
  'winddeg': 265,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 22:00:00'),
  'temp': 301.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.46,
  'winddeg': 267,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-05 23:00:00'),
  'temp': 301.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 2.41,
  'winddeg': 263,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 00:00:00'),
  'temp': 301.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 1.76,
  'winddeg': 254,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 01:00:00'),
  'temp': 301.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.84,
  'winddeg': 265,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 02:00:00'),
  'temp': 303.88,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 3.99,
  'winddeg': 264,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 03:00:00'),
  'temp': 304.12,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 4.49,
  'winddeg': 261,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 04:00:00'),
  'temp': 306.99,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 4.12,
  'winddeg': 259,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 05:00:00'),
  'temp': 306.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 3.97,
  'winddeg': 253,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 06:00:00'),
  'temp': 306.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 3.36,
  'winddeg': 277,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 07:00:00'),
  'temp': 306.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 3.98,
  'winddeg': 301,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 08:00:00'),
  'temp': 306.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 4.7,
  'winddeg': 303,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 09:00:00'),
  'temp': 306.09,
  'pressure': 1003,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 4.08,
  'winddeg': 282,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 10:00:00'),
  'temp': 306.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 3.12,
  'winddeg': 268,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 11:00:00'),
  'temp': 305.09,
  'pressure': 1004,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 3.42,
  'winddeg': 257,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 12:00:00'),
  'temp': 305.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 4.03,
  'winddeg': 252,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 13:00:00'),
  'temp': 304.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 3.29,
  'winddeg': 255,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 14:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 4.24,
  'winddeg': 261,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 15:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 3.43,
  'winddeg': 256,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 16:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.65,
  'winddeg': 247,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 17:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 2.08,
  'winddeg': 239,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 18:00:00'),
  'temp': 302.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.53,
  'winddeg': 244,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 19:00:00'),
  'temp': 302.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.36,
  'winddeg': 243,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 20:00:00'),
  'temp': 302.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.41,
  'winddeg': 235,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 21:00:00'),
  'temp': 301.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.15,
  'winddeg': 239,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 22:00:00'),
  'temp': 301.2,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.42,
  'winddeg': 231,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-06 23:00:00'),
  'temp': 300.2,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.38,
  'winddeg': 234,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 00:00:00'),
  'temp': 301.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.13,
  'winddeg': 234,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 01:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.49,
  'winddeg': 234,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 02:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.33,
  'winddeg': 233,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 03:00:00'),
  'temp': 305.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.32,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 04:00:00'),
  'temp': 305.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.85,
  'winddeg': 239,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 05:00:00'),
  'temp': 306.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 4.98,
  'winddeg': 261,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 06:00:00'),
  'temp': 306.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 4.6,
  'winddeg': 269,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 07:00:00'),
  'temp': 306.88,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 7.06,
  'winddeg': 258,
  'cloudall': 72,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 08:00:00'),
  'temp': 306.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 6.7,
  'winddeg': 261,
  'cloudall': 72,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 09:00:00'),
  'temp': 305.99,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 5.67,
  'winddeg': 260,
  'cloudall': 81,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 10:00:00'),
  'temp': 306.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 5.11,
  'winddeg': 258,
  'cloudall': 86,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 11:00:00'),
  'temp': 306.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 5,
  'winddeg': 250,
  'cloudall': 89,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 12:00:00'),
  'temp': 303.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 4.73,
  'winddeg': 250,
  'cloudall': 80,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 13:00:00'),
  'temp': 303.88,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 4.17,
  'winddeg': 240,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 14:00:00'),
  'temp': 303.88,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 4,
  'winddeg': 235,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 15:00:00'),
  'temp': 303.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 4.08,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 16:00:00'),
  'temp': 303.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 4.11,
  'winddeg': 232,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 17:00:00'),
  'temp': 302.99,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.89,
  'winddeg': 237,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 18:00:00'),
  'temp': 302.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 3.49,
  'winddeg': 236,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 19:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.89,
  'winddeg': 238,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 20:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 2.28,
  'winddeg': 239,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 21:00:00'),
  'temp': 302.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 1.95,
  'winddeg': 212,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 22:00:00'),
  'temp': 301.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 2.05,
  'winddeg': 206,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-07 23:00:00'),
  'temp': 301.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 2.63,
  'winddeg': 215,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 00:00:00'),
  'temp': 301.21,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 2.86,
  'winddeg': 213,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 01:00:00'),
  'temp': 302.98,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 3.78,
  'winddeg': 223,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 02:00:00'),
  'temp': 303.97,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 3.77,
  'winddeg': 222,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 03:00:00'),
  'temp': 304.97,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 4.07,
  'winddeg': 227,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 04:00:00'),
  'temp': 305.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 4.66,
  'winddeg': 229,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 05:00:00'),
  'temp': 306.03,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 5.26,
  'winddeg': 240,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 06:00:00'),
  'temp': 306.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 4.85,
  'winddeg': 251,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 07:00:00'),
  'temp': 307.09,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 5.5,
  'winddeg': 258,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 08:00:00'),
  'temp': 306.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 4.36,
  'winddeg': 260,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 09:00:00'),
  'temp': 305.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 4.32,
  'winddeg': 278,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 10:00:00'),
  'temp': 303.2,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 4.74,
  'winddeg': 275,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 11:00:00'),
  'temp': 304.99,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 4.38,
  'winddeg': 274,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 12:00:00'),
  'temp': 303.88,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 4.07,
  'winddeg': 258,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 13:00:00'),
  'temp': 303.88,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 3.48,
  'winddeg': 249,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 14:00:00'),
  'temp': 303.88,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 3.45,
  'winddeg': 235,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 15:00:00'),
  'temp': 303.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 3.71,
  'winddeg': 229,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 16:00:00'),
  'temp': 303.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 3.67,
  'winddeg': 223,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-09-08 17:00:00'),
  'temp': 302.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 3.61,
  'winddeg': 222,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-01 17:00:00'),
  'temp': 298.51,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 0.87,
  'winddeg': 197,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-01 18:00:00'),
  'temp': 299.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 0.98,
  'winddeg': 305,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-01 19:00:00'),
  'temp': 298.2,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 1.86,
  'winddeg': 356,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-01 20:00:00'),
  'temp': 299.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 1.94,
  'winddeg': 8,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-01 21:00:00'),
  'temp': 300.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.93,
  'winddeg': 9,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-01 22:00:00'),
  'temp': 299.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.55,
  'winddeg': 360,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-01 23:00:00'),
  'temp': 299.2,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.16,
  'winddeg': 358,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 00:00:00'),
  'temp': 299.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 1.71,
  'winddeg': 19,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 01:00:00'),
  'temp': 300.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 2.07,
  'winddeg': 28,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 02:00:00'),
  'temp': 301.3,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 1.92,
  'winddeg': 40,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 03:00:00'),
  'temp': 302.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 1.71,
  'winddeg': 54,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 04:00:00'),
  'temp': 303.23,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.3,
  'winddeg': 91,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 05:00:00'),
  'temp': 304.11,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 2.4,
  'winddeg': 128,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 06:00:00'),
  'temp': 305.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 5.31,
  'winddeg': 163,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 07:00:00'),
  'temp': 307.44,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 4.68,
  'winddeg': 179,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 08:00:00'),
  'temp': 306.13,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 4.36,
  'winddeg': 181,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 09:00:00'),
  'temp': 305.09,
  'pressure': 1005,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 4.08,
  'winddeg': 177,
  'cloudall': 98,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 10:00:00'),
  'temp': 305.88,
  'pressure': 1006,
  'grnd_level': None,
  'humidity': 65,
  'windspeed': 4.04,
  'winddeg': 176,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 11:00:00'),
  'temp': 303.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 3.6,
  'winddeg': 179,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 12:00:00'),
  'temp': 302.2,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 3.68,
  'winddeg': 171,
  'cloudall': 99,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 13:00:00'),
  'temp': 301.3,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 3.59,
  'winddeg': 175,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 14:00:00'),
  'temp': 301.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 3.66,
  'winddeg': 184,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 15:00:00'),
  'temp': 300.2,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 3.37,
  'winddeg': 196,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 16:00:00'),
  'temp': 300.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 2.46,
  'winddeg': 206,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 17:00:00'),
  'temp': 300.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.04,
  'winddeg': 228,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 18:00:00'),
  'temp': 300.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 3.47,
  'winddeg': 250,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 19:00:00'),
  'temp': 300.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 3.35,
  'winddeg': 263,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 20:00:00'),
  'temp': 299.2,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.33,
  'winddeg': 282,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 21:00:00'),
  'temp': 299.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 2.71,
  'winddeg': 286,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 22:00:00'),
  'temp': 299.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.2,
  'winddeg': 309,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-02 23:00:00'),
  'temp': 299.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.18,
  'winddeg': 313,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 00:00:00'),
  'temp': 299.99,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 1.91,
  'winddeg': 334,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 01:00:00'),
  'temp': 299.2,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 92,
  'windspeed': 2.73,
  'winddeg': 25,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 02:00:00'),
  'temp': 300.2,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 2.42,
  'winddeg': 21,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 03:00:00'),
  'temp': 301.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 2.48,
  'winddeg': 3,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 04:00:00'),
  'temp': 302.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.52,
  'winddeg': 355,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 05:00:00'),
  'temp': 303.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 2.6,
  'winddeg': 360,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 06:00:00'),
  'temp': 304.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 2.66,
  'winddeg': 15,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 07:00:00'),
  'temp': 306.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 2.26,
  'winddeg': 17,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 08:00:00'),
  'temp': 305.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 2.09,
  'winddeg': 9,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 09:00:00'),
  'temp': 305.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.27,
  'winddeg': 350,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 10:00:00'),
  'temp': 304.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 2.31,
  'winddeg': 352,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 11:00:00'),
  'temp': 303.98,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.24,
  'winddeg': 22,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 12:00:00'),
  'temp': 298.17,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 63,
  'windspeed': 2.13,
  'winddeg': 64,
  'cloudall': 99,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 13:00:00'),
  'temp': 298.88,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.44,
  'winddeg': 72,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 14:00:00'),
  'temp': 298.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.79,
  'winddeg': 81,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 15:00:00'),
  'temp': 299.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 3.53,
  'winddeg': 84,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 16:00:00'),
  'temp': 299.2,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 3.23,
  'winddeg': 91,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 17:00:00'),
  'temp': 299.2,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 3.11,
  'winddeg': 90,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 18:00:00'),
  'temp': 299.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.65,
  'winddeg': 165,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 19:00:00'),
  'temp': 299.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 89,
  'windspeed': 2.65,
  'winddeg': 196,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 20:00:00'),
  'temp': 299.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 2.15,
  'winddeg': 208,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 21:00:00'),
  'temp': 299.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.33,
  'winddeg': 209,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 22:00:00'),
  'temp': 299.32,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 1.32,
  'winddeg': 195,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-03 23:00:00'),
  'temp': 298.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 0.26,
  'winddeg': 132,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 00:00:00'),
  'temp': 297.99,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 90,
  'windspeed': 1.32,
  'winddeg': 43,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 01:00:00'),
  'temp': 298.4,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 2.13,
  'winddeg': 44,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 02:00:00'),
  'temp': 298.82,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.9,
  'winddeg': 41,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 03:00:00'),
  'temp': 302.28,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 1.25,
  'winddeg': 17,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 04:00:00'),
  'temp': 303.55,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 0.99,
  'winddeg': 2,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 05:00:00'),
  'temp': 299.2,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 1.03,
  'winddeg': 347,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 06:00:00'),
  'temp': 304.51,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 1.4,
  'winddeg': 321,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 07:00:00'),
  'temp': 302.2,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 1.75,
  'winddeg': 315,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 08:00:00'),
  'temp': 306.15,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 1.97,
  'winddeg': 318,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 09:00:00'),
  'temp': 304.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 3.02,
  'winddeg': 6,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 10:00:00'),
  'temp': 304.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 3.51,
  'winddeg': 29,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 11:00:00'),
  'temp': 303.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 91,
  'windspeed': 1.42,
  'winddeg': 327,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 12:00:00'),
  'temp': 302.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 3.29,
  'winddeg': 265,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 13:00:00'),
  'temp': 301.99,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 3.43,
  'winddeg': 251,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 14:00:00'),
  'temp': 299.2,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.63,
  'winddeg': 223,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 15:00:00'),
  'temp': 299.2,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 96,
  'windspeed': 3.42,
  'winddeg': 212,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 16:00:00'),
  'temp': 299.99,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 3.17,
  'winddeg': 219,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 17:00:00'),
  'temp': 299.99,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 2.05,
  'winddeg': 226,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 18:00:00'),
  'temp': 299.99,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 2.4,
  'winddeg': 223,
  'cloudall': 100,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 19:00:00'),
  'temp': 299.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 95,
  'windspeed': 1.88,
  'winddeg': 219,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 20:00:00'),
  'temp': 299.99,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 0.52,
  'winddeg': 259,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 21:00:00'),
  'temp': 299.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 1.06,
  'winddeg': 345,
  'cloudall': 93,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 22:00:00'),
  'temp': 299.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 1.92,
  'winddeg': 321,
  'cloudall': 76,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-04 23:00:00'),
  'temp': 299.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 94,
  'windspeed': 1.67,
  'winddeg': 321,
  'cloudall': 68,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 00:00:00'),
  'temp': 299.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 93,
  'windspeed': 1.41,
  'winddeg': 325,
  'cloudall': 58,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 01:00:00'),
  'temp': 300.99,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 88,
  'windspeed': 1.14,
  'winddeg': 333,
  'cloudall': 37,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 02:00:00'),
  'temp': 302.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 1.41,
  'winddeg': 355,
  'cloudall': 58,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 03:00:00'),
  'temp': 303.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 2.26,
  'winddeg': 352,
  'cloudall': 69,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 04:00:00'),
  'temp': 304.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 2.99,
  'winddeg': 339,
  'cloudall': 71,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 05:00:00'),
  'temp': 305.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 3.29,
  'winddeg': 337,
  'cloudall': 75,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 06:00:00'),
  'temp': 305.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 61,
  'windspeed': 3.24,
  'winddeg': 347,
  'cloudall': 74,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 07:00:00'),
  'temp': 305.99,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 2.79,
  'winddeg': 355,
  'cloudall': 74,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 08:00:00'),
  'temp': 306.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 58,
  'windspeed': 2.48,
  'winddeg': 13,
  'cloudall': 86,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 09:00:00'),
  'temp': 306.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 2.51,
  'winddeg': 22,
  'cloudall': 91,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 10:00:00'),
  'temp': 306.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 2.83,
  'winddeg': 22,
  'cloudall': 93,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 11:00:00'),
  'temp': 305.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 2.56,
  'winddeg': 14,
  'cloudall': 87,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 12:00:00'),
  'temp': 304.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 2.04,
  'winddeg': 7,
  'cloudall': 96,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 13:00:00'),
  'temp': 304.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 1.52,
  'winddeg': 16,
  'cloudall': 88,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 14:00:00'),
  'temp': 303.2,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 1.64,
  'winddeg': 64,
  'cloudall': 68,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 15:00:00'),
  'temp': 303.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 1.65,
  'winddeg': 93,
  'cloudall': 62,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 16:00:00'),
  'temp': 302.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 1.72,
  'winddeg': 106,
  'cloudall': 65,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 17:00:00'),
  'temp': 301.2,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 1.41,
  'winddeg': 96,
  'cloudall': 72,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 18:00:00'),
  'temp': 302.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.46,
  'winddeg': 83,
  'cloudall': 81,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 19:00:00'),
  'temp': 301.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.32,
  'winddeg': 51,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 20:00:00'),
  'temp': 301.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 1.37,
  'winddeg': 14,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 21:00:00'),
  'temp': 301.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 1.47,
  'winddeg': 347,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 22:00:00'),
  'temp': 300.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.45,
  'winddeg': 335,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-05 23:00:00'),
  'temp': 300.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 1.51,
  'winddeg': 311,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 00:00:00'),
  'temp': 300.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.01,
  'winddeg': 349,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 01:00:00'),
  'temp': 301.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 1.05,
  'winddeg': 19,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 02:00:00'),
  'temp': 302.09,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 1.08,
  'winddeg': 31,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 03:00:00'),
  'temp': 303.09,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 1.32,
  'winddeg': 40,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 04:00:00'),
  'temp': 304.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 1.69,
  'winddeg': 39,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 05:00:00'),
  'temp': 304.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 59,
  'windspeed': 1.92,
  'winddeg': 28,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 06:00:00'),
  'temp': 305.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 57,
  'windspeed': 2.33,
  'winddeg': 18,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 07:00:00'),
  'temp': 306.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 2.36,
  'winddeg': 8,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 08:00:00'),
  'temp': 306.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 2.52,
  'winddeg': 350,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 09:00:00'),
  'temp': 306.09,
  'pressure': 1007,
  'grnd_level': None,
  'humidity': 56,
  'windspeed': 2.63,
  'winddeg': 346,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 10:00:00'),
  'temp': 305.09,
  'pressure': 1008,
  'grnd_level': None,
  'humidity': 62,
  'windspeed': 2.37,
  'winddeg': 344,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 11:00:00'),
  'temp': 306.09,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 66,
  'windspeed': 2.14,
  'winddeg': 349,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 12:00:00'),
  'temp': 304.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 2.62,
  'winddeg': 8,
  'cloudall': 97,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 13:00:00'),
  'temp': 303.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 71,
  'windspeed': 2.06,
  'winddeg': 4,
  'cloudall': 29,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 14:00:00'),
  'temp': 303.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 73,
  'windspeed': 1.59,
  'winddeg': 355,
  'cloudall': 50,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 15:00:00'),
  'temp': 301.99,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 1.34,
  'winddeg': 342,
  'cloudall': 42,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 16:00:00'),
  'temp': 301.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 1.15,
  'winddeg': 339,
  'cloudall': 51,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 17:00:00'),
  'temp': 300.99,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 78,
  'windspeed': 1.05,
  'winddeg': 352,
  'cloudall': 44,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 18:00:00'),
  'temp': 300.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 1.25,
  'winddeg': 79,
  'cloudall': 54,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 19:00:00'),
  'temp': 299.3,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 82,
  'windspeed': 1.39,
  'winddeg': 102,
  'cloudall': 59,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 20:00:00'),
  'temp': 300.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 1.27,
  'winddeg': 103,
  'cloudall': 56,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 21:00:00'),
  'temp': 300.09,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 1.24,
  'winddeg': 92,
  'cloudall': 51,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 22:00:00'),
  'temp': 300.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 86,
  'windspeed': 1.27,
  'winddeg': 59,
  'cloudall': 56,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-06 23:00:00'),
  'temp': 299.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 87,
  'windspeed': 1.13,
  'winddeg': 35,
  'cloudall': 65,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 00:00:00'),
  'temp': 298.9,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 85,
  'windspeed': 1.31,
  'winddeg': 51,
  'cloudall': 74,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 01:00:00'),
  'temp': 299.95,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 80,
  'windspeed': 1.79,
  'winddeg': 62,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 02:00:00'),
  'temp': 301.21,
  'pressure': 1014,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 1.69,
  'winddeg': 36,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 03:00:00'),
  'temp': 302.44,
  'pressure': 1014,
  'grnd_level': None,
  'humidity': 69,
  'windspeed': 1.73,
  'winddeg': 11,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 04:00:00'),
  'temp': 303.65,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 1.91,
  'winddeg': 19,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 05:00:00'),
  'temp': 304.51,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 2.07,
  'winddeg': 30,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 06:00:00'),
  'temp': 305.52,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 2.22,
  'winddeg': 46,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 07:00:00'),
  'temp': 305.73,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 54,
  'windspeed': 2.08,
  'winddeg': 60,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 08:00:00'),
  'temp': 305.4,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 55,
  'windspeed': 1.88,
  'winddeg': 72,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 09:00:00'),
  'temp': 304.51,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 60,
  'windspeed': 1.55,
  'winddeg': 70,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 10:00:00'),
  'temp': 304.01,
  'pressure': 1009,
  'grnd_level': None,
  'humidity': 64,
  'windspeed': 1.29,
  'winddeg': 36,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 11:00:00'),
  'temp': 303.05,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 2.21,
  'winddeg': 17,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 12:00:00'),
  'temp': 302.91,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 68,
  'windspeed': 2.3,
  'winddeg': 26,
  'cloudall': 95,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 13:00:00'),
  'temp': 302.5,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 1.76,
  'winddeg': 19,
  'cloudall': 96,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 14:00:00'),
  'temp': 305.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 72,
  'windspeed': 1.72,
  'winddeg': 10,
  'cloudall': 97,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 15:00:00'),
  'temp': 304.2,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 74,
  'windspeed': 1.41,
  'winddeg': 357,
  'cloudall': 74,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 16:00:00'),
  'temp': 302.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 75,
  'windspeed': 1.4,
  'winddeg': 9,
  'cloudall': 67,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 17:00:00'),
  'temp': 302.3,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 1.46,
  'winddeg': 27,
  'cloudall': 57,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 18:00:00'),
  'temp': 302.3,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 77,
  'windspeed': 1.74,
  'winddeg': 22,
  'cloudall': 68,
  'weathermain': 'Rain'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 19:00:00'),
  'temp': 302.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 79,
  'windspeed': 2.09,
  'winddeg': 19,
  'cloudall': 16,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 20:00:00'),
  'temp': 301.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 81,
  'windspeed': 2.05,
  'winddeg': 12,
  'cloudall': 19,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 21:00:00'),
  'temp': 301.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.01,
  'winddeg': 1,
  'cloudall': 18,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 22:00:00'),
  'temp': 301.2,
  'pressure': 1010,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 1.94,
  'winddeg': 357,
  'cloudall': 18,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-07 23:00:00'),
  'temp': 301.09,
  'pressure': 1011,
  'grnd_level': None,
  'humidity': 84,
  'windspeed': 1.85,
  'winddeg': 8,
  'cloudall': 19,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-08 00:00:00'),
  'temp': 301.09,
  'pressure': 1012,
  'grnd_level': None,
  'humidity': 83,
  'windspeed': 2.08,
  'winddeg': 37,
  'cloudall': 27,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-08 01:00:00'),
  'temp': 301.2,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 76,
  'windspeed': 1.53,
  'winddeg': 48,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-08 02:00:00'),
  'temp': 303.09,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 70,
  'windspeed': 1.16,
  'winddeg': 17,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 {'station': '3T',
  'timestamp': Timestamp('2024-10-08 03:00:00'),
  'temp': 304.09,
  'pressure': 1013,
  'grnd_level': None,
  'humidity': 67,
  'windspeed': 1.47,
  'winddeg': 359,
  'cloudall': 100,
  'weathermain': 'Clouds'},
 ...]
In [45]:
all_df = pd.DataFrame(all_data)
In [46]:
all_df
Out[46]:
station timestamp temp pressure grnd_level humidity windspeed winddeg cloudall weathermain
0 3T 2024-05-04 17:00:00 305.44 1006 None 70 6.57 181 63 Clouds
1 3T 2024-05-04 18:00:00 304.42 1006 None 68 6.04 179 68 Clouds
2 3T 2024-05-04 19:00:00 304.42 1005 None 69 5.53 176 100 Clouds
3 3T 2024-05-04 20:00:00 304.09 1004 None 69 5.03 174 100 Clouds
4 3T 2024-05-04 21:00:00 304.52 1005 None 69 4.84 168 100 Clouds
... ... ... ... ... ... ... ... ... ... ...
14128 61T 2025-04-06 13:00:00 303.12 1009 None 68 7.68 189 100 Clouds
14129 61T 2025-04-06 14:00:00 303.12 1010 None 68 7.03 189 100 Clouds
14130 61T 2025-04-06 15:00:00 303.12 1011 None 69 7.04 187 100 Clouds
14131 61T 2025-04-06 16:00:00 303.12 1011 None 71 6.84 183 98 Clouds
14132 61T 2025-04-06 17:00:00 302.12 1011 None 73 5.92 183 86 Clouds

14133 rows × 10 columns

In [47]:
all_df.drop(columns=['grnd_level'], inplace=True)
In [48]:
all_df.isna().sum()
Out[48]:
station        0
timestamp      0
temp           0
pressure       0
humidity       0
windspeed      0
winddeg        0
cloudall       0
weathermain    0
dtype: int64
In [49]:
all_df.to_csv('../datasets/weather_historical_1y.csv', index=False)

Merge all required datasets¶

In [50]:
import pandas as pd

# Load Data
df_weather = pd.read_csv("../datasets/weather_historical_1y.csv")
df_variable = pd.read_csv("../datasets/variables.csv")
df_traffic = pd.read_csv("../datasets/traffic.csv")

# Fix column name issue in df_traffic (remove unwanted space)
df_traffic.rename(columns={"station ": "station"}, inplace=True)

# Convert timestamp to datetime format
df_weather["datetime"] = pd.to_datetime(df_weather["timestamp"])

# Extract relevant time features for merging with df_traffic
df_weather["day_of_week"] = df_weather["datetime"].dt.dayofweek  # 0=Monday, 6=Sunday
df_weather["hour"] = df_weather["datetime"].dt.hour

# **Merge df_weather with df_traffic (keeping all rows from df_weather)**
df_merged = df_weather.merge(df_traffic, on=["station", "day_of_week", "hour"], how="left")

# **Merge with df_variable on 'station' (df_variable is a dictionary-like dataset)**
df_final = df_merged.merge(df_variable, on="station", how="left")

# Fill missing station-level attributes from df_variable
for col in ["sea_level", "population", "population_density", "household", 
            "household_density", "green_space", "green_space_area", 
            "factory_num", "factory_area"]:
    df_final[col] = df_final.groupby("station")[col].transform("first")

# Drop duplicate records if needed
df_final = df_final.drop_duplicates(subset=["station", "datetime"], keep="first")

# Drop timestamp column
df_final.drop(columns=['timestamp'], inplace=True)

# Save the cleaned merged DataFrame
df_final.to_csv("../datasets/final_cleaned_merged_data.csv", index=False)

print("Cleaning & Merging Complete! Data saved as 'final_cleaned_merged_data.csv'")
Cleaning & Merging Complete! Data saved as 'final_cleaned_merged_data.csv'
In [51]:
df_final
Out[51]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... traffic_level sea_level population population_density household household_density green_space green_space_area factory_num factory_area
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
2 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
4 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
6 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
8 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 2 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
16147 61T 303.12 1009 68 7.68 189 100 Clouds 2025-04-06 13:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
16148 61T 303.12 1010 68 7.03 189 100 Clouds 2025-04-06 14:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
16149 61T 303.12 1011 69 7.04 187 100 Clouds 2025-04-06 15:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
16150 61T 303.12 1011 71 6.84 183 98 Clouds 2025-04-06 16:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
16151 61T 302.12 1011 73 5.92 183 86 Clouds 2025-04-06 17:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723

14133 rows × 21 columns

In [52]:
df_final.isna().sum()
Out[52]:
station               0
temp                  0
pressure              0
humidity              0
windspeed             0
winddeg               0
cloudall              0
weathermain           0
datetime              0
day_of_week           0
hour                  0
traffic_level         0
sea_level             0
population            0
population_density    0
household             0
household_density     0
green_space           0
green_space_area      0
factory_num           0
factory_area          0
dtype: int64
In [53]:
df_final.shape
Out[53]:
(14133, 21)

Load final dataset¶

In [54]:
# Load the datasets
df_final = pd.read_csv('../datasets/final_cleaned_merged_data.csv')
df_pollution = pd.read_csv('../datasets/pm25_bangkok_2025_lat_lon_.csv')

# Convert datetime columns to datetime format for merging
df_final['datetime'] = pd.to_datetime(df_final['datetime'])
df_pollution['datetime'] = pd.to_datetime(df_pollution['datetime'])

# Merge the data on 'station' and 'datetime', left join
merged_df = df_final.merge(df_pollution, on=['station', 'datetime'], how='left')
In [55]:
df_pollution.shape
Out[55]:
(62650, 11)
In [56]:
df_pollution
Out[56]:
Unnamed: 0 datetime station lat lon pm2_5 pm10 so2 no2 o3 co
0 0 2024-04-05 00:00:00 3T 13.7563 100.5018 60.38 105.99 46.73 42.84 0.17 1588.82
1 1 2024-04-05 00:00:00 5T 13.7367 100.5231 60.38 105.99 46.73 42.84 0.17 1588.82
2 2 2024-04-05 00:00:00 10T 13.7291 100.7750 24.00 64.58 6.68 12.34 36.84 487.33
3 3 2024-04-05 00:00:00 11T 13.7898 100.4486 53.13 85.17 25.75 34.62 5.63 961.30
4 4 2024-04-05 00:00:00 12T 13.8225 100.5147 60.38 105.99 46.73 42.84 0.17 1588.82
... ... ... ... ... ... ... ... ... ... ... ...
62645 62645 2025-04-12 21:00:00 10T 13.7291 100.7750 1.83 2.21 0.27 1.19 11.53 125.59
62646 62646 2025-04-12 21:00:00 11T 13.7898 100.4486 3.05 3.48 0.25 1.57 6.27 149.25
62647 62647 2025-04-12 21:00:00 12T 13.8225 100.5147 4.75 5.61 0.59 2.80 6.24 200.72
62648 62648 2025-04-12 21:00:00 15T 13.7083 100.3728 4.27 4.74 0.23 1.94 1.04 172.77
62649 62649 2025-04-12 21:00:00 61T 13.6796 100.6067 1.83 2.21 0.27 1.19 11.53 125.59

62650 rows × 11 columns

In [57]:
#Check Shape for df_final
df_final.shape
Out[57]:
(14133, 21)
In [58]:
df_final
Out[58]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... traffic_level sea_level population population_density household household_density green_space green_space_area factory_num factory_area
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
1 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
2 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
3 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 3 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
4 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 2 23 64468 9046.87 58039 0.81 10.77 0.10 112 123059
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 61T 303.12 1009 68 7.68 189 100 Clouds 2025-04-06 13:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
14129 61T 303.12 1010 68 7.03 189 100 Clouds 2025-04-06 14:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
14130 61T 303.12 1011 69 7.04 187 100 Clouds 2025-04-06 15:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
14131 61T 303.12 1011 71 6.84 183 98 Clouds 2025-04-06 16:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723
14132 61T 302.12 1011 73 5.92 183 86 Clouds 2025-04-06 17:00:00 6 ... 3 4 85345 4542.29 74932 0.40 5.08 0.02 302 631723

14133 rows × 21 columns

In [59]:
#Check Shape for merged_df
merged_df.shape
Out[59]:
(14133, 30)
In [60]:
merged_df
Out[60]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... factory_area Unnamed: 0 lat lon pm2_5 pm10 so2 no2 o3 co
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 123059 4991.0 13.7563 100.5018 38.68 67.32 29.56 40.44 1.06 1134.87
1 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 123059 4998.0 13.7563 100.5018 35.54 62.50 27.18 38.73 6.79 974.66
2 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 123059 5005.0 13.7563 100.5018 34.29 59.91 26.70 36.67 16.99 894.55
3 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 123059 5012.0 13.7563 100.5018 34.70 60.30 28.85 38.73 17.88 907.90
4 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 123059 5019.0 13.7563 100.5018 35.27 61.40 31.95 42.16 12.16 974.66
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 61T 303.12 1009 68 7.68 189 100 Clouds 2025-04-06 13:00:00 6 ... 631723 61585.0 13.6796 100.6067 3.03 6.37 0.23 0.46 32.25 149.57
14129 61T 303.12 1010 68 7.03 189 100 Clouds 2025-04-06 14:00:00 6 ... 631723 61592.0 13.6796 100.6067 3.29 7.00 0.27 0.59 30.47 154.53
14130 61T 303.12 1011 69 7.04 187 100 Clouds 2025-04-06 15:00:00 6 ... 631723 61599.0 13.6796 100.6067 3.51 7.41 0.29 0.70 29.10 158.59
14131 61T 303.12 1011 71 6.84 183 98 Clouds 2025-04-06 16:00:00 6 ... 631723 61606.0 13.6796 100.6067 3.67 7.63 0.28 0.78 27.95 160.56
14132 61T 302.12 1011 73 5.92 183 86 Clouds 2025-04-06 17:00:00 6 ... 631723 61613.0 13.6796 100.6067 3.81 7.83 0.24 0.81 27.31 161.98

14133 rows × 30 columns

In [61]:
merged_df.isna().sum()
Out[61]:
station                  0
temp                     0
pressure                 0
humidity                 0
windspeed                0
winddeg                  0
cloudall                 0
weathermain              0
datetime                 0
day_of_week              0
hour                     0
traffic_level            0
sea_level                0
population               0
population_density       0
household                0
household_density        0
green_space              0
green_space_area         0
factory_num              0
factory_area             0
Unnamed: 0            1232
lat                   1232
lon                   1232
pm2_5                 1232
pm10                  1232
so2                   1232
no2                   1232
o3                    1232
co                    1232
dtype: int64
In [62]:
# Drop the 'Unnamed: 0' column if it exists
merged_df = merged_df.drop(columns=['Unnamed: 0'], errors='ignore')

# Save the merged dataset as master_dataset.csv
merged_df.to_csv('../datasets/master_dataset.csv', index=False)
In [63]:
merged_df.isna().sum()
Out[63]:
station                  0
temp                     0
pressure                 0
humidity                 0
windspeed                0
winddeg                  0
cloudall                 0
weathermain              0
datetime                 0
day_of_week              0
hour                     0
traffic_level            0
sea_level                0
population               0
population_density       0
household                0
household_density        0
green_space              0
green_space_area         0
factory_num              0
factory_area             0
lat                   1232
lon                   1232
pm2_5                 1232
pm10                  1232
so2                   1232
no2                   1232
o3                    1232
co                    1232
dtype: int64
In [64]:
df = pd.read_csv('../datasets/master_dataset.csv')
df
Out[64]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... factory_num factory_area lat lon pm2_5 pm10 so2 no2 o3 co
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 112 123059 13.7563 100.5018 38.68 67.32 29.56 40.44 1.06 1134.87
1 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 112 123059 13.7563 100.5018 35.54 62.50 27.18 38.73 6.79 974.66
2 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 112 123059 13.7563 100.5018 34.29 59.91 26.70 36.67 16.99 894.55
3 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 112 123059 13.7563 100.5018 34.70 60.30 28.85 38.73 17.88 907.90
4 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 112 123059 13.7563 100.5018 35.27 61.40 31.95 42.16 12.16 974.66
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 61T 303.12 1009 68 7.68 189 100 Clouds 2025-04-06 13:00:00 6 ... 302 631723 13.6796 100.6067 3.03 6.37 0.23 0.46 32.25 149.57
14129 61T 303.12 1010 68 7.03 189 100 Clouds 2025-04-06 14:00:00 6 ... 302 631723 13.6796 100.6067 3.29 7.00 0.27 0.59 30.47 154.53
14130 61T 303.12 1011 69 7.04 187 100 Clouds 2025-04-06 15:00:00 6 ... 302 631723 13.6796 100.6067 3.51 7.41 0.29 0.70 29.10 158.59
14131 61T 303.12 1011 71 6.84 183 98 Clouds 2025-04-06 16:00:00 6 ... 302 631723 13.6796 100.6067 3.67 7.63 0.28 0.78 27.95 160.56
14132 61T 302.12 1011 73 5.92 183 86 Clouds 2025-04-06 17:00:00 6 ... 302 631723 13.6796 100.6067 3.81 7.83 0.24 0.81 27.31 161.98

14133 rows × 29 columns

In [65]:
df.columns
Out[65]:
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
       'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
       'traffic_level', 'sea_level', 'population', 'population_density',
       'household', 'household_density', 'green_space', 'green_space_area',
       'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
       'no2', 'o3', 'co'],
      dtype='object')

6. Explanatory Data Analysis¶

In [66]:
# Add more feature about time
df['datetime'] = pd.to_datetime(df['datetime'])

# Extract hour as 'time'
df['hour'] = df['datetime'].dt.hour

# Extract month
df['month'] = df['datetime'].dt.month

# Extract day of the week as a number (0 as Monday to 6 as Sunday)
df['day_of_week'] = df['datetime'].dt.dayofweek

# Display the updated DataFrame
df.head()
Out[66]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... factory_area lat lon pm2_5 pm10 so2 no2 o3 co month
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 123059 13.7563 100.5018 38.68 67.32 29.56 40.44 1.06 1134.87 5
1 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 123059 13.7563 100.5018 35.54 62.50 27.18 38.73 6.79 974.66 5
2 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 123059 13.7563 100.5018 34.29 59.91 26.70 36.67 16.99 894.55 5
3 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 123059 13.7563 100.5018 34.70 60.30 28.85 38.73 17.88 907.90 5
4 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 123059 13.7563 100.5018 35.27 61.40 31.95 42.16 12.16 974.66 5

5 rows × 30 columns

In [67]:
df_variable = pd.read_csv('../datasets/variables.csv',header=0)
In [68]:
df.head()
Out[68]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... factory_area lat lon pm2_5 pm10 so2 no2 o3 co month
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 123059 13.7563 100.5018 38.68 67.32 29.56 40.44 1.06 1134.87 5
1 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 123059 13.7563 100.5018 35.54 62.50 27.18 38.73 6.79 974.66 5
2 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 123059 13.7563 100.5018 34.29 59.91 26.70 36.67 16.99 894.55 5
3 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 123059 13.7563 100.5018 34.70 60.30 28.85 38.73 17.88 907.90 5
4 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 123059 13.7563 100.5018 35.27 61.40 31.95 42.16 12.16 974.66 5

5 rows × 30 columns

In [69]:
def map_season(month):
    if 3 <= month <= 4:
        return 'Hot Season'
    elif 5 <= month <= 10:
        return 'Rainy Season'
    else:
        return 'Cool Season'

# Apply the function to create a new 'season' column
df['season'] = df['month'].apply(map_season)
In [70]:
# 🔹 Ensure all seasons exist (even if missing in dataset)
expected_seasons = ["season_Hot Season", "season_Rainy Season"]

# Perform one-hot encoding
season_dummies = pd.get_dummies(df["season"], prefix="season")

# Add missing columns (if not generated)
for col in expected_seasons:
    if col not in season_dummies:
        season_dummies[col] = 0  # Fill missing season columns with 0

# Ensure all dummy columns are int type (not bool)
season_dummies = season_dummies.astype(int)

# Concatenate the encoded season features back to the dataset
df = pd.concat([df, season_dummies], axis=1)
In [71]:
df.columns
Out[71]:
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
       'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
       'traffic_level', 'sea_level', 'population', 'population_density',
       'household', 'household_density', 'green_space', 'green_space_area',
       'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
       'no2', 'o3', 'co', 'month', 'season', 'season_Cool Season',
       'season_Hot Season', 'season_Rainy Season'],
      dtype='object')
In [72]:
df.head()
Out[72]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... pm10 so2 no2 o3 co month season season_Cool Season season_Hot Season season_Rainy Season
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 67.32 29.56 40.44 1.06 1134.87 5 Rainy Season 0 0 1
1 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 62.50 27.18 38.73 6.79 974.66 5 Rainy Season 0 0 1
2 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 59.91 26.70 36.67 16.99 894.55 5 Rainy Season 0 0 1
3 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 60.30 28.85 38.73 17.88 907.90 5 Rainy Season 0 0 1
4 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 61.40 31.95 42.16 12.16 974.66 5 Rainy Season 0 0 1

5 rows × 34 columns

In [73]:
# Ensure 'df' is a DataFrame
if not isinstance(df, pd.DataFrame):
    raise TypeError("df is not a DataFrame. Ensure it is correctly loaded.")
In [74]:
# Check if 'season' and 'pm2_5' exist
if 'season' not in df.columns or 'pm2_5' not in df.columns:
    raise KeyError("Ensure 'season' and 'pm2_5' exist in df.")
In [75]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14133 entries, 0 to 14132
Data columns (total 34 columns):
 #   Column               Non-Null Count  Dtype         
---  ------               --------------  -----         
 0   station              14133 non-null  object        
 1   temp                 14133 non-null  float64       
 2   pressure             14133 non-null  int64         
 3   humidity             14133 non-null  int64         
 4   windspeed            14133 non-null  float64       
 5   winddeg              14133 non-null  int64         
 6   cloudall             14133 non-null  int64         
 7   weathermain          14133 non-null  object        
 8   datetime             14133 non-null  datetime64[ns]
 9   day_of_week          14133 non-null  int32         
 10  hour                 14133 non-null  int32         
 11  traffic_level        14133 non-null  int64         
 12  sea_level            14133 non-null  int64         
 13  population           14133 non-null  int64         
 14  population_density   14133 non-null  float64       
 15  household            14133 non-null  int64         
 16  household_density    14133 non-null  float64       
 17  green_space          14133 non-null  float64       
 18  green_space_area     14133 non-null  float64       
 19  factory_num          14133 non-null  int64         
 20  factory_area         14133 non-null  int64         
 21  lat                  12901 non-null  float64       
 22  lon                  12901 non-null  float64       
 23  pm2_5                12901 non-null  float64       
 24  pm10                 12901 non-null  float64       
 25  so2                  12901 non-null  float64       
 26  no2                  12901 non-null  float64       
 27  o3                   12901 non-null  float64       
 28  co                   12901 non-null  float64       
 29  month                14133 non-null  int32         
 30  season               14133 non-null  object        
 31  season_Cool Season   14133 non-null  int64         
 32  season_Hot Season    14133 non-null  int64         
 33  season_Rainy Season  14133 non-null  int64         
dtypes: datetime64[ns](1), float64(14), int32(3), int64(13), object(3)
memory usage: 3.5+ MB
In [76]:
# Group by season and calculate the mean
seasonal_pm25 = df.groupby('season', as_index=False)['pm2_5'].mean()

# Ensure it is a DataFrame
if not isinstance(seasonal_pm25, pd.DataFrame):
    raise TypeError("seasonal_pm25 is not a DataFrame after groupby operation.")

# Create a bar plot
plt.figure(figsize=(10, 5))
plt.bar(seasonal_pm25['season'], seasonal_pm25['pm2_5'], color=['blue', 'orange', 'green', 'red'])
plt.title('Average PM2.5 Levels by Season')
plt.xlabel('Season')
plt.ylabel('Average PM2.5 Levels')
plt.xticks(rotation=45)
plt.show()
No description has been provided for this image
In [77]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14133 entries, 0 to 14132
Data columns (total 34 columns):
 #   Column               Non-Null Count  Dtype         
---  ------               --------------  -----         
 0   station              14133 non-null  object        
 1   temp                 14133 non-null  float64       
 2   pressure             14133 non-null  int64         
 3   humidity             14133 non-null  int64         
 4   windspeed            14133 non-null  float64       
 5   winddeg              14133 non-null  int64         
 6   cloudall             14133 non-null  int64         
 7   weathermain          14133 non-null  object        
 8   datetime             14133 non-null  datetime64[ns]
 9   day_of_week          14133 non-null  int32         
 10  hour                 14133 non-null  int32         
 11  traffic_level        14133 non-null  int64         
 12  sea_level            14133 non-null  int64         
 13  population           14133 non-null  int64         
 14  population_density   14133 non-null  float64       
 15  household            14133 non-null  int64         
 16  household_density    14133 non-null  float64       
 17  green_space          14133 non-null  float64       
 18  green_space_area     14133 non-null  float64       
 19  factory_num          14133 non-null  int64         
 20  factory_area         14133 non-null  int64         
 21  lat                  12901 non-null  float64       
 22  lon                  12901 non-null  float64       
 23  pm2_5                12901 non-null  float64       
 24  pm10                 12901 non-null  float64       
 25  so2                  12901 non-null  float64       
 26  no2                  12901 non-null  float64       
 27  o3                   12901 non-null  float64       
 28  co                   12901 non-null  float64       
 29  month                14133 non-null  int32         
 30  season               14133 non-null  object        
 31  season_Cool Season   14133 non-null  int64         
 32  season_Hot Season    14133 non-null  int64         
 33  season_Rainy Season  14133 non-null  int64         
dtypes: datetime64[ns](1), float64(14), int32(3), int64(13), object(3)
memory usage: 3.5+ MB
In [78]:
df.columns
Out[78]:
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
       'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
       'traffic_level', 'sea_level', 'population', 'population_density',
       'household', 'household_density', 'green_space', 'green_space_area',
       'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
       'no2', 'o3', 'co', 'month', 'season', 'season_Cool Season',
       'season_Hot Season', 'season_Rainy Season'],
      dtype='object')

Inspect PM2.5¶

Green Space Distribution By Station¶

In [79]:
green_space_per_station = df.groupby('station')['green_space'].mean().reset_index()

# Create the bar graph
plt.figure(figsize=(10, 5))
sns.barplot(x='station', y='green_space', data=green_space_per_station)
plt.title('Green Space Distribution by Station')
plt.xlabel('Station')
plt.ylabel('Average Green Space')
plt.xticks(rotation=45)  # Rotate station names for better readability
plt.show()
No description has been provided for this image

Distribution of PM2.5 Values¶

In [80]:
# Create histogram for PM2.5 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['pm2_5'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of PM₂.₅ Values')
plt.xlabel('PM₂.₅ Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
No description has been provided for this image

Average PM2.5 Level Per Month¶

In [81]:
# Calculate average PM2.5 per month (Bar Graph)
average_pm25_per_month = df.groupby('month')['pm2_5'].mean().reset_index()

# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_pm25_per_month, x='month', y='pm2_5')
plt.title('Average PM₂.₅ Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average PM₂.₅ Levels')
plt.grid(True)
plt.show()
No description has been provided for this image
In [82]:
# Calculate average PM2.5 per month (Line Plot)
average_pm25_per_month = df.groupby('month')['pm2_5'].mean().reset_index()

# Create Line Plot
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_pm25_per_month, x='month', y='pm2_5', marker='o', color='green')
plt.title('Monthly PM₂.₅ Trends')
plt.xlabel('Month')
plt.ylabel('Average PM₂.₅ Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Hourly Distribution of PM2.5¶

In [83]:
#Hourly Distribution of PM2.5 throughout the day
hourly_pm25_trends = df.groupby('hour')['pm2_5'].mean().reset_index()

# Create Line Plot
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_pm25_trends, x='hour', y='pm2_5', marker='o', color='skyblue')
plt.title('Hourly PM₂.₅ Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average PM₂.₅ Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Distribution Per Day Throughtout the Week (0-Monday & 6-Sunday)¶

In [84]:
# Bar plot for PM2.5 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='pm2_5', palette='coolwarm')
plt.title('PM₂.₅ Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('PM₂.₅ Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1072736171.py:3: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(data=df, x='day_of_week', y='pm2_5', palette='coolwarm')
No description has been provided for this image

Green Space and PM2.5 Levels Per Station¶

In [85]:
station_stats = df.groupby('station').agg({
    'green_space': 'mean',  # Average or sum of green space per station
    'pm10': 'mean'        # Average PM2.5 levels per station
}).reset_index()

# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))

# Plotting both 'green_space' and 'pm10' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['pm10'], bar_width, label='PM2.5')

# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and PM2.5 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()

# Show Graph
plt.tight_layout()
plt.show()
No description has been provided for this image

Average PM2.5 Level By Green Space¶

In [86]:
average_pm25_by_greenspace = df.groupby('green_space')['pm2_5'].mean().reset_index()
average_pm25_by_greenspace = average_pm25_by_greenspace.sort_values('green_space')

# Create a line plot for the average PM2.5 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='pm2_5', data=average_pm25_by_greenspace, marker='o', color='blue')
plt.title('Average PM2.5 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average PM2.5 Level')
plt.grid(True)  # Optional: Adds a grid for better readability
plt.show()
No description has been provided for this image

Inspect PM10¶

Distribution of PM10 Values¶

In [87]:
# Create histogram for pm10 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['pm10'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of pm10 Values')
plt.xlabel('pm10 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
No description has been provided for this image

Average PM10 Levels Per Month¶

In [88]:
# Calculate average pm10 per month
average_pm10_per_month = df.groupby('month')['pm10'].mean().reset_index()

# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_pm10_per_month, x='month', y='pm10')
plt.title('Average pm10 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average pm10 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image
In [89]:
#Montly Trend PM10 Distribution
average_pm10_per_month = df.groupby('month')['pm10'].mean().reset_index()
plt.figure(figsize=(10, 5))
sns.lineplot(data=average_pm10_per_month, x='month', y='pm10', marker='o', color='green')
plt.title('Monthly pm10 Trends')
plt.xlabel('Month')
plt.ylabel('Average pm10 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Hourly Distribution of PM10¶

In [90]:
hourly_pm10_trends = df.groupby('hour')['pm10'].mean().reset_index()

# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_pm10_trends, x='hour', y='pm10', marker='o', color='skyblue')
plt.title('Hourly pm10 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average pm10 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

PM10 Distribution Per Day of the Week (0-Monday & 6-Sunday)¶

In [91]:
# Bar plot for pm10 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='pm10', palette='coolwarm')
plt.title('pm10 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('pm10 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\693026414.py:3: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(data=df, x='day_of_week', y='pm10', palette='coolwarm')
No description has been provided for this image

Green Space and PM10 Levels per Station¶

In [92]:
station_stats = df.groupby('station').agg({
    'green_space': 'mean',  # Average or sum of green space per station
    'pm10': 'mean'        # Average pm10 levels per station
}).reset_index()

# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))

# Plotting both 'green_space' and 'pm10' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['pm10'], bar_width, label='pm10')

# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and pm10 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()

# Show the plot
plt.tight_layout()
plt.show()
No description has been provided for this image

Average PM10 Levels by Green Space¶

In [93]:
average_pm10_by_greenspace = df.groupby('green_space')['pm10'].mean().reset_index()
average_pm10_by_greenspace = average_pm10_by_greenspace.sort_values('green_space')

# Create a line plot for the average pm10 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='pm10', data=average_pm10_by_greenspace, marker='o', color='blue')
plt.title('Average pm10 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average pm10 Level')
plt.grid(True)  # Optional: Adds a grid for better readability
plt.show()
No description has been provided for this image

Inspect Sulfur dioxide(SO2)¶

Distribution of SO2 Values¶

In [94]:
# Create histogram for so2 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['so2'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of so2 Values')
plt.xlabel('so2 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
No description has been provided for this image

Average Distribution of SO2 Levels per Month¶

In [95]:
# Calculate average so2 per month
average_so2_per_month = df.groupby('month')['so2'].mean().reset_index()

# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_so2_per_month, x='month', y='so2')
plt.title('Average SO2 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average SO2 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image
In [96]:
#Trends of Montly SO2 Distribution
average_so2_per_month = df.groupby('month')['so2'].mean().reset_index()

plt.figure(figsize=(10, 5))
sns.lineplot(data=average_so2_per_month, x='month', y='so2', marker='o', color='green')
plt.title('Monthly so2 Trends')
plt.xlabel('Month')
plt.ylabel('Average so2 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Hourly Distribution of SO2¶

In [97]:
hourly_so2_trends = df.groupby('hour')['so2'].mean().reset_index()

# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_so2_trends, x='hour', y='so2', marker='o', color='skyblue')
plt.title('Hourly so2 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average so2 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Distributuion of SO2 Per Day of the Week (0-Monday & 6-Sunday)¶

In [98]:
# Bar plot for so2 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='so2', palette='coolwarm')
plt.title('so2 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('so2 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1278283898.py:3: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(data=df, x='day_of_week', y='so2', palette='coolwarm')
No description has been provided for this image

Green Space and SO2 Levels Per Station¶

In [99]:
station_stats = df.groupby('station').agg({
    'green_space': 'mean',  # Average or sum of green space per station
    'so2': 'mean'        # Average so2 levels per station
}).reset_index()

# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))

# Plotting both 'green_space' and 'so2' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['so2'], bar_width, label='so2')

# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and so2 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()

# Show the plot
plt.tight_layout()
plt.show()
No description has been provided for this image

Average SO2 Levels by Green Space¶

In [100]:
average_so2_by_greenspace = df.groupby('green_space')['so2'].mean().reset_index()
average_so2_by_greenspace = average_so2_by_greenspace.sort_values('green_space')

# Create a line plot for the average so2 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='so2', data=average_so2_by_greenspace, marker='o', color='blue')
plt.title('Average so2 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average so2 Level')
plt.grid(True)  # Optional: Adds a grid for better readability
plt.show()
No description has been provided for this image

Inspect Nitrogen dioxide (NO2)¶

Distributuon of NO2 Values¶

In [101]:
# Create histogram for no2 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['no2'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of NO2 Values')
plt.xlabel('NO2 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
No description has been provided for this image

Average Distributuon of NO2 Levels per Month¶

In [102]:
# Calculate average no2 per month
average_no2_per_month = df.groupby('month')['no2'].mean().reset_index()

# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_no2_per_month, x='month', y='no2')
plt.title('Average NO2 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average NO2 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image
In [103]:
# You can reuse average_no2_per_month calculated previously
average_no2_per_month = df.groupby('month')['no2'].mean().reset_index()

plt.figure(figsize=(10, 5))
sns.lineplot(data=average_no2_per_month, x='month', y='no2', marker='o', color='green')
plt.title('Monthly no2 Trends')
plt.xlabel('Month')
plt.ylabel('Average no2 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Hourly Distribution of NO2 Trend¶

In [104]:
hourly_no2_trends = df.groupby('hour')['no2'].mean().reset_index()

# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_no2_trends, x='hour', y='no2', marker='o', color='skyblue')
plt.title('Hourly no2 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average no2 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

NO2 Distribution Per Day of the Week (0-Monday & 6-Sunday)¶

In [105]:
# Bar plot for no2 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='no2', palette='coolwarm')
plt.title('NO2 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('NO2 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1610298790.py:3: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(data=df, x='day_of_week', y='no2', palette='coolwarm')
No description has been provided for this image

Green Space and NO2 Levels Per Station¶

In [106]:
station_stats = df.groupby('station').agg({
    'green_space': 'mean',  # Average or sum of green space per station
    'no2': 'mean'        # Average no2 levels per station
}).reset_index()

# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))

# Plotting both 'green_space' and 'no2' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['no2'], bar_width, label='no2')

# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and no2 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()

# Show the plot
plt.tight_layout()
plt.show()
No description has been provided for this image

Average NO2 Levels by Green Space¶

In [107]:
average_no2_by_greenspace = df.groupby('green_space')['no2'].mean().reset_index()
average_no2_by_greenspace = average_no2_by_greenspace.sort_values('green_space')

# Create a line plot for the average no2 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='no2', data=average_no2_by_greenspace, marker='o', color='blue')
plt.title('Average no2 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average no2 Level')
plt.grid(True)  # Optional: Adds a grid for better readability
plt.show()
No description has been provided for this image

Inspect Ozone Level(O3)¶

Distribution of O3 Values¶

In [108]:
# Create histogram for o3 distribution
plt.figure(figsize=(10, 5))
plt.hist(df['o3'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of O3 Values')
plt.xlabel('O3 Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
No description has been provided for this image

Average O3 Level Per Month¶

In [109]:
# Calculate average o3 per month
average_o3_per_month = df.groupby('month')['o3'].mean().reset_index()

# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_o3_per_month, x='month', y='o3')
plt.title('Average O3 Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average O3 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image
In [110]:
# You can reuse average_o3_per_month calculated previously
average_o3_per_month = df.groupby('month')['o3'].mean().reset_index()

plt.figure(figsize=(10, 5))
sns.lineplot(data=average_o3_per_month, x='month', y='o3', marker='o', color='green')
plt.title('Monthly O3 Trends')
plt.xlabel('Month')
plt.ylabel('Average O3 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Average Hourly O3 Trends¶

In [111]:
hourly_o3_trends = df.groupby('hour')['o3'].mean().reset_index()

# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_o3_trends, x='hour', y='o3', marker='o', color='skyblue')
plt.title('Hourly O3 Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average O3 Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

O3 Distribution per Day of the Week (0-Monday & 6-Sunday)¶

In [112]:
# Bar plot for o3 distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='o3', palette='coolwarm')
plt.title('O3 Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('O3 Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\605535918.py:3: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(data=df, x='day_of_week', y='o3', palette='coolwarm')
No description has been provided for this image

Green Space nad O3 Levels Per Station¶

In [113]:
station_stats = df.groupby('station').agg({
    'green_space': 'mean',  # Average or sum of green space per station
    'o3': 'mean'        # Average o3 levels per station
}).reset_index()

# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))

# Plotting both 'green_space' and 'o3' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['o3'], bar_width, label='o3')

# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and O3 Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()

# Show the plot
plt.tight_layout()
plt.show()
No description has been provided for this image

Average O3 Levels by Green Space¶

In [114]:
average_o3_by_greenspace = df.groupby('green_space')['o3'].mean().reset_index()
average_o3_by_greenspace = average_o3_by_greenspace.sort_values('green_space')

# Create a line plot for the average o3 levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='o3', data=average_o3_by_greenspace, marker='o', color='blue')
plt.title('Average O3 Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average O3 Level')
plt.grid(True)  # Optional: Adds a grid for better readability
plt.show()
No description has been provided for this image

Inspect Carbon Monoxide(CO)¶

Distribution of CO Values¶

In [115]:
# Create histogram for co distribution
plt.figure(figsize=(10, 5))
plt.hist(df['co'], bins=30, color='skyblue', edgecolor='black')
plt.title('Distribution of CO Values')
plt.xlabel('CO Levels')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
No description has been provided for this image

Average CO Levels Per Month¶

In [116]:
# Calculate average co per month
average_co_per_month = df.groupby('month')['co'].mean().reset_index()

# Create bar chart
plt.figure(figsize=(10, 5))
sns.barplot(data=average_co_per_month, x='month', y='co')
plt.title('Average CO Levels per Month')
plt.xlabel('Month')
plt.ylabel('Average CO Levels')
plt.grid(True)
plt.show()
No description has been provided for this image
In [117]:
# You can reuse average_co_per_month calculated previously
average_co_per_month = df.groupby('month')['co'].mean().reset_index()

plt.figure(figsize=(10, 5))
sns.lineplot(data=average_co_per_month, x='month', y='co', marker='o', color='green')
plt.title('Monthly CO Trends')
plt.xlabel('Month')
plt.ylabel('Average CO Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

Hourly Distribution of CO Trends¶

In [118]:
hourly_co_trends = df.groupby('hour')['co'].mean().reset_index()

# Create line plot for hourly trends
plt.figure(figsize=(10, 5))
sns.lineplot(data=hourly_co_trends, x='hour', y='co', marker='o', color='skyblue')
plt.title('Hourly CO Trends')
plt.xlabel('Hour of the Day')
plt.ylabel('Average CO Levels')
plt.grid(True)
plt.show()
No description has been provided for this image

CO Distribution Per Day of the Week¶

In [119]:
# Bar plot for co distribution per day of the week
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='day_of_week', y='co', palette='coolwarm')
plt.title('CO Distribution Per Day of the Week')
plt.xlabel('Day of the Week')
plt.ylabel('CO Levels')
plt.grid(True)
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\313729694.py:3: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(data=df, x='day_of_week', y='co', palette='coolwarm')
No description has been provided for this image

Green Space and CO Levels Per Station¶

In [120]:
station_stats = df.groupby('station').agg({
    'green_space': 'mean',  # Average or sum of green space per station
    'co': 'mean'        # Average co levels per station
}).reset_index()

# Create a grouped bar chart
plt.figure(figsize=(10, 5))
# Setting the positions for the bars
bar_width = 0.35
index = range(len(station_stats['station']))

# Plotting both 'green_space' and 'co' data
bars1 = plt.bar(index, station_stats['green_space'], bar_width, label='Green Space')
bars2 = plt.bar([p + bar_width for p in index], station_stats['co'], bar_width, label='co')

# Adding labels, title, and legend
plt.xlabel('Station')
plt.ylabel('Values')
plt.title('Green Space and CO Levels Per Station')
plt.xticks([p + bar_width / 2 for p in index], station_stats['station'], rotation=45)
plt.legend()

# Show the plot
plt.tight_layout()
plt.show()
No description has been provided for this image

Average CO Levels By Green Space¶

In [121]:
average_co_by_greenspace = df.groupby('green_space')['co'].mean().reset_index()
average_co_by_greenspace = average_co_by_greenspace.sort_values('green_space')

# Create a line plot for the average co levels by green space
plt.figure(figsize=(10, 6))
sns.lineplot(x='green_space', y='co', data=average_co_by_greenspace, marker='o', color='blue')
plt.title('Average co Levels by Green Space')
plt.xlabel('Green Space')
plt.ylabel('Average co Level')
plt.grid(True)  # Optional: Adds a grid for better readability
plt.show()
No description has been provided for this image

Inspect Other Variables¶

Average PM2.5 Levels by Traffic Level¶

In [122]:
# Calculate the average PM2.5 for each traffic level
avg_pm25_by_traffic = df.groupby('traffic_level')['pm2_5'].mean().reset_index()

# Create a bar plot
plt.figure(figsize=(8, 6))
sns.barplot(x='traffic_level', y='pm2_5', data=avg_pm25_by_traffic, palette="Blues_d")

# Add labels and title
plt.xlabel('Traffic Level (1 = No Traffic, 4 = Heavy Traffic)')
plt.ylabel('Average PM2.5 Level (µg/m³)')
plt.title('Average PM2.5 Levels by Traffic Level')

# Show the plot
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1396813456.py:6: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(x='traffic_level', y='pm2_5', data=avg_pm25_by_traffic, palette="Blues_d")
No description has been provided for this image

Traffic Level by Hour of the Day¶

In [123]:
# Create a line plot for Traffic Level by Hour
plt.figure(figsize=(10, 6))
sns.lineplot(x='hour', y='traffic_level', data=df, marker='o', color='b')

# Label the axes and the plot
plt.xlabel('Hour of the Day')
plt.ylabel('Traffic Level')
plt.title('Traffic Level by Hour of the Day')

# Show grid for better readability
plt.grid(True)

# Show the plot
plt.show()
No description has been provided for this image

Analyzing Correlation Correlation between PM2.5 and Other Air Quality Indices (PM10, SO2, NO2, O3, CO)'¶

Correlation Plot between PM10 and PM2.5¶

In [124]:
# Create the regression plot for pm10 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['pm10'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("PM10")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of PM10 vs PM2.5 (Correlation: {df['pm10'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
No description has been provided for this image

Correlation Plot between SO2 and PM2.5¶

In [125]:
# Create the regression plot for so2 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['so2'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("SO2")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of SO2 vs PM2.5 (Correlation: {df['so2'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
No description has been provided for this image

Correlation Plot between NO2 and PM2.5¶

In [126]:
# Create the regression plot for no2 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['no2'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("NO2")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of NO2 vs PM2.5 (Correlation: {df['no2'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
No description has been provided for this image

Correlation Plot between O3 and PM2.5¶

In [127]:
# Create the regression plot for o3 vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['o3'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("O3")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of O3 vs PM2.5 (Correlation: {df['o3'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
No description has been provided for this image

Correlation Plot between CO and PM2.5¶

In [128]:
# Create the regression plot for co vs. pm2.5
plt.figure(figsize=(8, 6))
sns.regplot(x=df['co'], y=df['pm2_5'], scatter_kws={"alpha": 0.5}, line_kws={"color": "red"})
plt.xlabel("CO")
plt.ylabel("PM2.5")
plt.title(f"Regression Plot of CO vs PM2.5 (Correlation: {df['co'].corr(df['pm2_5']):.2f})")
plt.grid()
plt.show()
No description has been provided for this image

We need to use these analysis¶

  • Trend analysis
  • Cyclicity analysis
  • Seasonal analysis
In [129]:
# Selected features for heatmap correlation analysis
selected_cols = ['pm2_5', 'pm10', 'so2', 'no2', 'o3', 'co', 'sea_level','temp','humidity','hour','month','day_of_week', 'population_density', 'household_density','green_space_area','factory_num', 'factory_area', 'season_Hot Season', 'season_Rainy Season','season_Cool Season']

Heatmap with pearson method: Good for linear relationship¶

In [130]:
corr_matrix = df[selected_cols].corr(method='pearson')
corr_matrix

# Plotting the heatmap for numerical columns
plt.figure(figsize=(18,12))
sns.heatmap(data=corr_matrix, cmap='coolwarm', fmt=' .2f', annot=True, linewidths=1.5)
plt.show()
No description has been provided for this image

Heatmap with spearman method: Good for non-linear relationship¶

In [131]:
corr_matrix = df[selected_cols].corr(method='spearman')
corr_matrix

# Plotting the heatmap for numerical columns
plt.figure(figsize=(18,12))
sns.heatmap(data=corr_matrix, cmap='coolwarm', fmt=' .2f', annot=True, linewidths=1.5)
plt.show()
No description has been provided for this image

We use spearman method of correlation¶

  • Because we are relying on rendom forest, XGBoost, Decision Tree!
  • This is the non-parametric method!
  • And we will compare performance for these 3 models (non-parametric method) to Linear models like Linear Regression, Ridge, Lasso Regression (Parametric method), and non-machine-learning method such as moving average to make sure that our assumption of non-parametric method is the best suited for PM2.5 prediction
  • Additionally, spearman (non-linear relation) captures relationship better than pearson (Linear relation)

7. Feature selection¶

Choose the most salient X¶

  • Rule of thumb: Good features MUST NOT BE correlated, i.e., independent
  • Rule of thumb: Correlation is not causation; don’t pick features using correlation only; it should make sense!
  • Rule of thumb: For ML, less features are usually better (but NOT necessarily for DL)

Specify the y¶

Split train / test¶

In [132]:
average_no2_per_month# 🔹 Ensure all expected stations exist (even if missing in df)
expected_stations = ['3T', '5T', '10T', '11T', '12T', '15T', '61T']  # include all known stations

# Perform one-hot encoding
station_dummies = pd.get_dummies(df["station"], prefix="station")

# Add missing station columns (if not present in df)
for col in expected_stations:
    dummy_col = f'station_{col}'
    if dummy_col not in station_dummies:
        station_dummies[dummy_col] = 0  # Fill missing station columns with 0

# Ensure all dummy columns are int type
station_dummies = station_dummies.astype(int)

# Concatenate the encoded station features back to the dataset
df = pd.concat([df, station_dummies], axis=1)
In [133]:
df
Out[133]:
station temp pressure humidity windspeed winddeg cloudall weathermain datetime day_of_week ... season_Cool Season season_Hot Season season_Rainy Season station_10T station_11T station_12T station_15T station_3T station_5T station_61T
0 3T 305.44 1006 70 6.57 181 63 Clouds 2024-05-04 17:00:00 5 ... 0 0 1 0 0 0 0 1 0 0
1 3T 304.42 1006 68 6.04 179 68 Clouds 2024-05-04 18:00:00 5 ... 0 0 1 0 0 0 0 1 0 0
2 3T 304.42 1005 69 5.53 176 100 Clouds 2024-05-04 19:00:00 5 ... 0 0 1 0 0 0 0 1 0 0
3 3T 304.09 1004 69 5.03 174 100 Clouds 2024-05-04 20:00:00 5 ... 0 0 1 0 0 0 0 1 0 0
4 3T 304.52 1005 69 4.84 168 100 Clouds 2024-05-04 21:00:00 5 ... 0 0 1 0 0 0 0 1 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 61T 303.12 1009 68 7.68 189 100 Clouds 2025-04-06 13:00:00 6 ... 0 1 0 0 0 0 0 0 0 1
14129 61T 303.12 1010 68 7.03 189 100 Clouds 2025-04-06 14:00:00 6 ... 0 1 0 0 0 0 0 0 0 1
14130 61T 303.12 1011 69 7.04 187 100 Clouds 2025-04-06 15:00:00 6 ... 0 1 0 0 0 0 0 0 0 1
14131 61T 303.12 1011 71 6.84 183 98 Clouds 2025-04-06 16:00:00 6 ... 0 1 0 0 0 0 0 0 0 1
14132 61T 302.12 1011 73 5.92 183 86 Clouds 2025-04-06 17:00:00 6 ... 0 1 0 0 0 0 0 0 0 1

14133 rows × 41 columns

In [134]:
df.columns
Out[134]:
Index(['station', 'temp', 'pressure', 'humidity', 'windspeed', 'winddeg',
       'cloudall', 'weathermain', 'datetime', 'day_of_week', 'hour',
       'traffic_level', 'sea_level', 'population', 'population_density',
       'household', 'household_density', 'green_space', 'green_space_area',
       'factory_num', 'factory_area', 'lat', 'lon', 'pm2_5', 'pm10', 'so2',
       'no2', 'o3', 'co', 'month', 'season', 'season_Cool Season',
       'season_Hot Season', 'season_Rainy Season', 'station_10T',
       'station_11T', 'station_12T', 'station_15T', 'station_3T', 'station_5T',
       'station_61T'],
      dtype='object')
In [135]:
df['station'].unique()
Out[135]:
array(['3T', '5T', '10T', '11T', '12T', '15T', '61T'], dtype=object)
In [136]:
for col in df.columns:
    if df[col].nunique() == 1:
        print(f"⚠️ '{col}' has only one unique value in test set: {df[col].unique()[0]}")
In [137]:
features = df[['station', 'temp','population_density','factory_area','season_Cool Season','season_Hot Season','season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co']]
target = df['pm2_5']

Split X and y features (Time-Aware Style)¶

In [138]:
df['population_density'].unique()
Out[138]:
array([ 9046.87,  4788.74,  1452.45,  3437.36, 10275.79,  4324.14,
        4542.29])
In [139]:
df_sorted = df.sort_values(by=['datetime', 'station']).reset_index(drop=True)
In [140]:
int(len(features) * 0.9)
Out[140]:
12719
In [141]:
target.isna().sum()
Out[141]:
np.int64(1232)
In [142]:
df_sorted.isna().sum()
Out[142]:
station                   0
temp                      0
pressure                  0
humidity                  0
windspeed                 0
winddeg                   0
cloudall                  0
weathermain               0
datetime                  0
day_of_week               0
hour                      0
traffic_level             0
sea_level                 0
population                0
population_density        0
household                 0
household_density         0
green_space               0
green_space_area          0
factory_num               0
factory_area              0
lat                    1232
lon                    1232
pm2_5                  1232
pm10                   1232
so2                    1232
no2                    1232
o3                     1232
co                     1232
month                     0
season                    0
season_Cool Season        0
season_Hot Season         0
season_Rainy Season       0
station_10T               0
station_11T               0
station_12T               0
station_15T               0
station_3T                0
station_5T                0
station_61T               0
dtype: int64
In [143]:
df_sorted.dropna(inplace=True)
In [144]:
features = df_sorted[['station_10T', 'station_11T', 'station_12T', 'station_15T', 'station_3T', 'station_5T', 
                      'station_61T', 'temp','population_density','factory_area',
                      'season_Cool Season','season_Hot Season','season_Rainy Season',
                      'pm10', 'so2', 'no2', 'o3', 'co']]

target = df_sorted['pm2_5']

split_point = int(len(features) * 0.9)
X_train = features.iloc[:split_point]
X_test = features.iloc[split_point:]

y_train = target.iloc[:split_point]
y_test = target.iloc[split_point:]
In [145]:
for col in X_test.columns:
    if X_test[col].nunique() == 1:
        print(f"⚠️ '{col}' has only one unique value in test set: {X_test[col].unique()[0]}")
⚠️ 'season_Rainy Season' has only one unique value in test set: 0
In [146]:
print("Train unique pop_density:", X_train['population_density'].nunique())
print("Test unique pop_density:", X_test['population_density'].nunique())
Train unique pop_density: 7
Test unique pop_density: 7
In [147]:
print("X_train shape:", X_train.shape)
print("X_test shape:", X_test.shape)
X_train shape: (11610, 18)
X_test shape: (1291, 18)
In [148]:
print("y_train shape:", y_train.shape)
print("y_test shape:", y_test.shape)
y_train shape: (11610,)
y_test shape: (1291,)
In [149]:
X_train
Out[149]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10 so2 no2 o3 co
0 1 0 0 0 0 0 0 305.04 1452.45 4770457 0 0 1 48.05 5.96 12.51 41.13 467.30
1 0 1 0 0 0 0 0 306.10 3437.36 144736 0 0 1 49.19 16.45 23.31 33.97 700.95
2 0 0 1 0 0 0 0 305.70 10275.79 297638 0 0 1 67.32 29.56 40.44 1.06 1134.87
3 0 0 0 1 0 0 0 306.66 4324.14 1148799 0 0 1 49.19 16.45 23.31 33.97 700.95
4 0 0 0 0 1 0 0 305.44 9046.87 123059 0 0 1 67.32 29.56 40.44 1.06 1134.87
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
11605 0 0 0 0 0 0 1 301.12 4542.29 631723 1 0 0 170.51 28.37 106.93 5.54 2643.59
11606 1 0 0 0 0 0 0 300.12 1452.45 4770457 1 0 0 151.00 9.30 50.04 16.63 1668.93
11607 0 1 0 0 0 0 0 299.93 3437.36 144736 1 0 0 310.17 64.85 148.06 0.00 6195.07
11608 0 0 1 0 0 0 0 299.74 10275.79 297638 1 0 0 260.48 96.32 131.61 0.00 4592.90
11609 0 0 0 1 0 0 0 300.15 4324.14 1148799 1 0 0 310.17 64.85 148.06 0.00 6195.07

11610 rows × 18 columns

In [150]:
X_test
Out[150]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10 so2 no2 o3 co
11610 0 0 0 0 1 0 0 300.20 9046.87 123059 1 0 0 260.48 96.32 131.61 0.00 4592.90
11611 0 0 0 0 0 1 0 300.20 4788.74 54185 1 0 0 260.48 96.32 131.61 0.00 4592.90
11612 0 0 0 0 0 0 1 300.88 4542.29 631723 1 0 0 142.15 24.56 94.59 7.60 2296.45
11613 1 0 0 0 0 0 0 299.25 1452.45 4770457 1 0 0 142.83 7.39 45.93 20.74 1575.47
11614 0 1 0 0 0 0 0 299.10 3437.36 144736 1 0 0 329.52 70.57 149.43 0.00 6408.69
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 0 0 1 0 0 0 0 302.13 10275.79 297638 0 1 0 8.23 0.29 1.01 26.25 168.04
14129 0 0 0 1 0 0 0 302.07 4324.14 1148799 0 1 0 7.55 0.31 1.48 19.02 173.68
14130 0 0 0 0 1 0 0 302.09 9046.87 123059 0 1 0 8.23 0.29 1.01 26.25 168.04
14131 0 0 0 0 0 1 0 302.09 4788.74 54185 0 1 0 8.23 0.29 1.01 26.25 168.04
14132 0 0 0 0 0 0 1 302.12 4542.29 631723 0 1 0 7.83 0.24 0.81 27.31 161.98

1291 rows × 18 columns

In [151]:
y_train
Out[151]:
0         20.68
1         31.13
2         38.68
3         31.13
4         38.68
          ...  
11605     99.46
11606     81.52
11607    214.77
11608    144.39
11609    214.77
Name: pm2_5, Length: 11610, dtype: float64
In [152]:
y_test
Out[152]:
11610    144.39
11611    144.39
11612     87.53
11613     80.80
11614    228.16
          ...  
14128      3.96
14129      4.18
14130      3.96
14131      3.96
14132      3.81
Name: pm2_5, Length: 1291, dtype: float64
In [153]:
X_train
Out[153]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10 so2 no2 o3 co
0 1 0 0 0 0 0 0 305.04 1452.45 4770457 0 0 1 48.05 5.96 12.51 41.13 467.30
1 0 1 0 0 0 0 0 306.10 3437.36 144736 0 0 1 49.19 16.45 23.31 33.97 700.95
2 0 0 1 0 0 0 0 305.70 10275.79 297638 0 0 1 67.32 29.56 40.44 1.06 1134.87
3 0 0 0 1 0 0 0 306.66 4324.14 1148799 0 0 1 49.19 16.45 23.31 33.97 700.95
4 0 0 0 0 1 0 0 305.44 9046.87 123059 0 0 1 67.32 29.56 40.44 1.06 1134.87
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
11605 0 0 0 0 0 0 1 301.12 4542.29 631723 1 0 0 170.51 28.37 106.93 5.54 2643.59
11606 1 0 0 0 0 0 0 300.12 1452.45 4770457 1 0 0 151.00 9.30 50.04 16.63 1668.93
11607 0 1 0 0 0 0 0 299.93 3437.36 144736 1 0 0 310.17 64.85 148.06 0.00 6195.07
11608 0 0 1 0 0 0 0 299.74 10275.79 297638 1 0 0 260.48 96.32 131.61 0.00 4592.90
11609 0 0 0 1 0 0 0 300.15 4324.14 1148799 1 0 0 310.17 64.85 148.06 0.00 6195.07

11610 rows × 18 columns

In [154]:
X_train.isna().sum()
Out[154]:
station_10T            0
station_11T            0
station_12T            0
station_15T            0
station_3T             0
station_5T             0
station_61T            0
temp                   0
population_density     0
factory_area           0
season_Cool Season     0
season_Hot Season      0
season_Rainy Season    0
pm10                   0
so2                    0
no2                    0
o3                     0
co                     0
dtype: int64
In [155]:
X_test.isna().sum()
Out[155]:
station_10T            0
station_11T            0
station_12T            0
station_15T            0
station_3T             0
station_5T             0
station_61T            0
temp                   0
population_density     0
factory_area           0
season_Cool Season     0
season_Hot Season      0
season_Rainy Season    0
pm10                   0
so2                    0
no2                    0
o3                     0
co                     0
dtype: int64
In [156]:
y_train.shape
Out[156]:
(11610,)
In [157]:
y_train.isna().sum()
Out[157]:
np.int64(0)
In [158]:
y_test.shape
Out[158]:
(1291,)
In [159]:
y_test.isna().sum()
Out[159]:
np.int64(0)

Handling Missing Values After Spliting¶

In [160]:
# Drop missing values in y_train and y_test
X_train = X_train[~y_train.isna()]
y_train = y_train.dropna()

X_test = X_test[~y_test.isna()]
y_test = y_test.dropna()
In [161]:
X_train.columns
Out[161]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')
In [162]:
y_train
Out[162]:
0         20.68
1         31.13
2         38.68
3         31.13
4         38.68
          ...  
11605     99.46
11606     81.52
11607    214.77
11608    144.39
11609    214.77
Name: pm2_5, Length: 11610, dtype: float64

Check Distribution and skew value¶

In [163]:
X_train.columns
Out[163]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')
In [164]:
X_test.columns
Out[164]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')

Check distribution¶

temp¶

  • X_train
In [165]:
sns.displot(X_train, x='temp')

plt.title('Distribution plot for temperature')

plt.show()
print('The distribution of temperature feature seems to be normaly distributed')
No description has been provided for this image
The distribution of temperature feature seems to be normaly distributed
In [166]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['temp'])
print('-'*30)
print(f"SKewness of temperature: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is very close to the center')
print('This suggest taht the distribution is nearly normaly distributed')
------------------------------
SKewness of temperature: 0.0419
------------------------------
The skewness is being around 0.0419 which is very close to the center
This suggest taht the distribution is nearly normaly distributed
  • X_test
In [167]:
sns.displot(X_test, x='temp')

plt.title('Distribution plot for temperature')

plt.show()
print('The distribution of temperature feature seems to be normaly distributed')
No description has been provided for this image
The distribution of temperature feature seems to be normaly distributed
In [168]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['temp'])
print('-'*30)
print(f"SKewness of temperature: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is very close to the center')
print('This suggest taht the distribution is nearly normaly distributed')
------------------------------
SKewness of temperature: 0.2394
------------------------------
The skewness is being around 0.2394 which is very close to the center
This suggest taht the distribution is nearly normaly distributed

poppulation_density¶

  • X_train
In [169]:
sns.displot(X_train, x='population_density')

plt.title('Distribution plot for population_density')

plt.show()
print('The distribution of population_density feature seems to be normaly distributed')
No description has been provided for this image
The distribution of population_density feature seems to be normaly distributed
In [170]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['population_density'])
print('-'*30)
print(f"SKewness of population_density: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------
SKewness of population_density: 0.5375
------------------------------
The skewness is being around 0.5375 which is skewed to the right side
This suggest taht the distribution is right-skewed
  • X_test
In [171]:
sns.displot(X_test, x='population_density')

plt.title('Distribution plot for population_density')

plt.show()
print('The distribution of population_density feature seems to be normaly distributed')
No description has been provided for this image
The distribution of population_density feature seems to be normaly distributed
In [172]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['population_density'])
print('-'*30)
print(f"SKewness of population_density: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------
SKewness of population_density: 0.5368
------------------------------
The skewness is being around 0.5368 which is skewed to the right side
This suggest taht the distribution is right-skewed
In [173]:
X_train.columns
Out[173]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')
In [174]:
print("Unique population_density values in X_train:", sorted(X_train['population_density'].unique()))
print("Value counts:")
print(X_train['population_density'].value_counts())
Unique population_density values in X_train: [np.float64(1452.45), np.float64(3437.36), np.float64(4324.14), np.float64(4542.29), np.float64(4788.74), np.float64(9046.87), np.float64(10275.79)]
Value counts:
population_density
1452.45     1659
3437.36     1659
10275.79    1659
4324.14     1659
9046.87     1658
4788.74     1658
4542.29     1658
Name: count, dtype: int64

factory_area¶

  • X_train
In [175]:
sns.displot(X_train, x='factory_area')

plt.title('Distribution plot for factory_area')

plt.show()
print('The distribution of factory_area feature seems to be right-skewd distributed')
No description has been provided for this image
The distribution of factory_area feature seems to be right-skewd distributed
In [176]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['factory_area'])
print('-'*30)
print(f"SKewness of factory_area: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------
SKewness of factory_area: 1.8374
------------------------------
The skewness is being around 1.8374 which is skewed to the right side
This suggest taht the distribution is right-skewed
  • X_test
In [177]:
sns.displot(X_test, x='factory_area')

plt.title('Distribution plot for factory_area')

plt.show()
print('The distribution of factory_area feature seems to be right-skewd distributed')
No description has been provided for this image
The distribution of factory_area feature seems to be right-skewd distributed
In [178]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['factory_area'])
print('-'*30)
print(f"SKewness of factory_area: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------
SKewness of factory_area: 1.8413
------------------------------
The skewness is being around 1.8413 which is skewed to the right side
This suggest taht the distribution is right-skewed
In [179]:
print("Unique factory_area values in X_train:", sorted(X_train['factory_area'].unique()))
print("Value counts:")
print(X_train['factory_area'].value_counts())
Unique factory_area values in X_train: [np.int64(54185), np.int64(123059), np.int64(144736), np.int64(297638), np.int64(631723), np.int64(1148799), np.int64(4770457)]
Value counts:
factory_area
4770457    1659
144736     1659
297638     1659
1148799    1659
123059     1658
54185      1658
631723     1658
Name: count, dtype: int64

season_Cool Season¶

  • X-train
In [180]:
sns.displot(X_train, x='season_Cool Season')

plt.title('Distribution plot for season_Cool Season')

plt.show()
print('The distribution of season_Cool Season feature seems to be right-skewd distributed')
No description has been provided for this image
The distribution of season_Cool Season feature seems to be right-skewd distributed
In [181]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['season_Cool Season'])
print('-'*30)
print(f"SKewness of season_Cool Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------
SKewness of season_Cool Season: 0.4752
------------------------------
The skewness is being around 0.4752 which is skewed to the right side
This suggest taht the distribution is right-skewed
  • X_test
In [182]:
sns.displot(X_test, x='season_Cool Season')

plt.title('Distribution plot for season_Cool Season')

plt.show()
print('The distribution of season_Cool Season feature seems to be right-skewd distributed')
No description has been provided for this image
The distribution of season_Cool Season feature seems to be right-skewd distributed
In [183]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['season_Cool Season'])
print('-'*30)
print(f"SKewness of season_Cool Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest taht the distribution is right-skewed')
------------------------------
SKewness of season_Cool Season: 1.7532
------------------------------
The skewness is being around 1.7532 which is skewed to the right side
This suggest taht the distribution is right-skewed
In [184]:
X_train.columns
Out[184]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')

season_Hot Season¶

  • X_train
In [185]:
sns.displot(X_train, x='season_Hot Season')

plt.title('Distribution plot for season_Hot Season')

plt.show()
print('The distribution of season_Hot Season feature seems to be right-skewd distributed')
No description has been provided for this image
The distribution of season_Hot Season feature seems to be right-skewd distributed
In [186]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['season_Hot Season'])
print('-'*30)
print(f"SKewness of season_Hot Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest taht the distribution is heavily right-skewed')
------------------------------
SKewness of season_Hot Season: nan
------------------------------
The skewness is being around nan which is heavily skewed to the right side
This suggest taht the distribution is heavily right-skewed
  • X_test
In [187]:
sns.displot(X_test, x='season_Hot Season')

plt.title('Distribution plot for season_Hot Season')

plt.show()
print('The distribution of season_Hot Season feature seems to be right-skewd distributed')
No description has been provided for this image
The distribution of season_Hot Season feature seems to be right-skewd distributed
In [188]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['season_Hot Season'])
print('-'*30)
print(f"SKewness of season_Hot Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest taht the distribution is heavily right-skewed')
------------------------------
SKewness of season_Hot Season: -1.7532
------------------------------
The skewness is being around -1.7532 which is heavily skewed to the right side
This suggest taht the distribution is heavily right-skewed

season_Rainy Season¶

  • X_train
In [189]:
sns.displot(X_train, x='season_Rainy Season')

plt.title('Distribution plot for season_Rainy Season')

plt.show()
print('The distribution of season_Rainy Season feature seems to be normaly distributed')
No description has been provided for this image
The distribution of season_Rainy Season feature seems to be normaly distributed
In [190]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['season_Rainy Season'])
print('-'*30)
print(f"SKewness of season_Rainy Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is close to the center')
print('This suggest that the distribution is normaly distributed')
------------------------------
SKewness of season_Rainy Season: -0.4752
------------------------------
The skewness is being around -0.4752 which is close to the center
This suggest that the distribution is normaly distributed
  • X_test
In [191]:
sns.displot(X_test, x='season_Rainy Season')

plt.title('Distribution plot for season_Rainy Season')

plt.show()
print('The distribution of season_Rainy Season feature seems to be normaly distributed')
No description has been provided for this image
The distribution of season_Rainy Season feature seems to be normaly distributed
In [192]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['season_Rainy Season'])
print('-'*30)
print(f"SKewness of season_Rainy Season: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is close to the center')
print('This suggest that the distribution is normaly distributed')
------------------------------
SKewness of season_Rainy Season: nan
------------------------------
The skewness is being around nan which is close to the center
This suggest that the distribution is normaly distributed
In [193]:
X_train.columns
Out[193]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')

pm10¶

  • X_train
In [194]:
sns.displot(X_train, x='pm10')

plt.title('Distribution plot for pm10')

plt.show()
print('The distribution of pm10 feature seems to be heavily right-skewd distribution')
No description has been provided for this image
The distribution of pm10 feature seems to be heavily right-skewd distribution
In [195]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['pm10'])
print('-'*30)
print(f"SKewness of pm10: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of pm10: 1.4901
------------------------------
The skewness is being around 1.4901 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed
  • X_test
In [196]:
sns.displot(X_test, x='pm10')

plt.title('Distribution plot for pm10')

plt.show()
print('The distribution of pm10 feature seems to be heavily right-skewd distribution')
No description has been provided for this image
The distribution of pm10 feature seems to be heavily right-skewd distribution
In [197]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['pm10'])
print('-'*30)
print(f"SKewness of pm10: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of pm10: 2.2215
------------------------------
The skewness is being around 2.2215 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed
In [198]:
X_train.columns
Out[198]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')

so2¶

  • X_train
In [199]:
sns.displot(X_train, x='so2')

plt.title('Distribution plot for so2')

plt.show()
print('The distribution of so2 feature seems to be right-skewd distribution')
No description has been provided for this image
The distribution of so2 feature seems to be right-skewd distribution
In [200]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['so2'])
print('-'*30)
print(f"SKewness of so2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest that the distribution is right-skewed')
------------------------------
SKewness of so2: 1.2583
------------------------------
The skewness is being around 1.2583 which is skewed to the right side
This suggest that the distribution is right-skewed
  • X_test
In [201]:
sns.displot(X_test, x='so2')

plt.title('Distribution plot for so2')

plt.show()
print('The distribution of so2 feature seems to be right-skewd distribution')
No description has been provided for this image
The distribution of so2 feature seems to be right-skewd distribution
In [202]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['so2'])
print('-'*30)
print(f"SKewness of so2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is skewed to the right side')
print('This suggest that the distribution is right-skewed')
------------------------------
SKewness of so2: 1.5841
------------------------------
The skewness is being around 1.5841 which is skewed to the right side
This suggest that the distribution is right-skewed

o3¶

  • X_train
In [203]:
sns.displot(X_train, x='o3')

plt.title('Distribution plot for o3')

plt.show()
print('The distribution of o3 feature seems to be heavily right-skewd distribution')
No description has been provided for this image
The distribution of o3 feature seems to be heavily right-skewd distribution
In [204]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['o3'])
print('-'*30)
print(f"SKewness of o3: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of o3: 3.0859
------------------------------
The skewness is being around 3.0859 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed
  • X_test
In [205]:
sns.displot(X_test, x='o3')

plt.title('Distribution plot for o3')

plt.show()
print('The distribution of o3 feature seems to be heavily right-skewd distribution')
No description has been provided for this image
The distribution of o3 feature seems to be heavily right-skewd distribution
In [206]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['o3'])
print('-'*30)
print(f"SKewness of o3: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of o3: 1.6909
------------------------------
The skewness is being around 1.6909 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed

co¶

  • X_train
In [207]:
sns.displot(X_train, x='co')

plt.title('Distribution plot for co')

plt.show()
print('The distribution of co feature seems to be heavily right-skewd distribution')
No description has been provided for this image
The distribution of co feature seems to be heavily right-skewd distribution
In [208]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['co'])
print('-'*30)
print(f"SKewness of co: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of co: 2.0521
------------------------------
The skewness is being around 2.0521 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed
  • X_test
In [209]:
sns.displot(X_test, x='co')

plt.title('Distribution plot for co')

plt.show()
print('The distribution of co feature seems to be heavily right-skewd distribution')
No description has been provided for this image
The distribution of co feature seems to be heavily right-skewd distribution
In [210]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['co'])
print('-'*30)
print(f"SKewness of co: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of co: 2.0962
------------------------------
The skewness is being around 2.0962 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed

The distribution summary for the processed trainning dataset¶

  • 'fuel_eff' has the normal distribution: Skewness of fuel_eff: 0.0015

  • 'year' has the left-skewed distribution: Skewness of year: -0.82

  • 'max_power' has the right-skewed distribution: Skewness of max_power: 0.84

  • 'km_driven' has the right-skewed distribution: Skewness of km_driven: 0.75

Handling Outliners¶

  • We found out that some of the features are unbalanced distributed

  • Thus, this can be caused by having the outliner and is also leaving unsolved

  • To improve the model performance in prediction, the outliners that can alter the predicting values must be handled

  • Rule of trump: The catrgorical features must be excluded from scaling

Check propamatic feature with abnormal distribution¶

no2 in X_train Need to be fixed¶

  • X_train
In [211]:
sns.displot(X_train, x='no2')

plt.title('Distribution plot for no2')

plt.show()
print('The distribution of no2 feature seems to be right-skewd distribution')
No description has been provided for this image
The distribution of no2 feature seems to be right-skewd distribution
In [212]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train['no2'])
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is abnormal as the further investigation is needed')
print('This suggest that the distribution is abnormal as the further investigation is neede')
------------------------------
SKewness of no2: -39.3749
------------------------------
The skewness is being around -39.3749 which is abnormal as the further investigation is needed
This suggest that the distribution is abnormal as the further investigation is neede
  • X_test
In [213]:
sns.displot(X_test, x='no2')

plt.title('Distribution plot for no2')

plt.show()
print('The distribution of no2 feature seems to be right-skewd distribution')
No description has been provided for this image
The distribution of no2 feature seems to be right-skewd distribution
In [214]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_test['no2'])
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of no2: 1.7355
------------------------------
The skewness is being around 1.7355 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed
In [215]:
X_train.columns
Out[215]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')

pm2_5 in y_train needed to be fixed¶

  • y_train
In [216]:
y_train
Out[216]:
0         20.68
1         31.13
2         38.68
3         31.13
4         38.68
          ...  
11605     99.46
11606     81.52
11607    214.77
11608    144.39
11609    214.77
Name: pm2_5, Length: 11610, dtype: float64
In [217]:
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8, 5))
sns.histplot(y_train, kde=True, color="red")
plt.title("pm2_5 Distribution (y_train)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
No description has been provided for this image
In [218]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(y_train)
print('-'*30)
print(f"SKewness of pm2_5: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is abnormal as the further investigation is needed')
print('This suggest that the distribution is abnormal as the further investigation is neede')
------------------------------
SKewness of pm2_5: 1.7241
------------------------------
The skewness is being around 1.7241 which is abnormal as the further investigation is needed
This suggest that the distribution is abnormal as the further investigation is neede
  • y_test
In [219]:
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8, 5))
sns.histplot(y_test, kde=True, color="red")
plt.title("pm2_5 Distribution (y_test)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
No description has been provided for this image
In [220]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(y_test)
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is abnormal as the further investigation is needed')
print('This suggest that the distribution is abnormal as the further investigation is neede')
------------------------------
SKewness of no2: 2.2416
------------------------------
The skewness is being around 2.2416 which is abnormal as the further investigation is needed
This suggest that the distribution is abnormal as the further investigation is neede
In [221]:
upper_bound = y_train.quantile(0.94)
# lower_bound = y_train.quantile(0.05)

# y_train = y_train.copy()
y_train[y_train > upper_bound] = upper_bound
# y_train[y_train < lower_bound] = lower_bound
In [222]:
print("Old Max:", y_train.max())

# Replace any pm2_5 values above threshold with the median
threshold = 150
y_train[y_train > threshold] = y_train.median()

print("Number of outliers replaced:",
      (y_train > threshold).sum())
print("Old Max:", y_train.max(), "| New Max:", y_train.max())
Old Max: 218.6
Number of outliers replaced: 0
Old Max: 149.99 | New Max: 149.99
In [223]:
print("Old Max:", y_test.max())

# Replace any pm2_5 values above threshold with the median
threshold = 150
y_test[y_test > threshold] = y_test.median()

print("Number of outliers replaced:",
      (y_test > threshold).sum())
print("New Max:", y_test.max())
Old Max: 259.56
Number of outliers replaced: 0
New Max: 144.71
 259.56
Number of outliers replaced: 0
New Max: 144.71

After capping outliners, check distribution and skewness again¶

In [224]:
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8, 5))
sns.histplot(y_train, kde=True, color="red")
plt.title("pm2_5 Distribution (y_train)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
No description has been provided for this image
In [225]:
import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8, 5))
sns.histplot(y_test, kde=True, color="red")
plt.title("pm2_5 Distribution (y_test)")
plt.xlabel("pm2_5")
plt.ylabel("Count")
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
No description has been provided for this image

Possible causes of extreme abnormal distribution of no2¶

  1. Distribution plot shows extreme negative skewness
  • The strange distribution reaching down to -10,000 and beyond is not normal at all.

  • NO₂ (Nitrogen Dioxide) levels can't realistically be negative in such extreme ways — it's likely:

    • Corrupted values
    • Measurement/recording errors
    • Or possibly placeholder values for missing data (e.g., -9999)
  1. Skewness of -54.6277:
  • This is extremely negative skew, which strongly contradicts our plot description ("right-skewed").

  • This kind of value clearly shows abnormal, broken, or erroneous entries.

-> Issue found: X_train['no2'] column contains severe outliers or corrupted data, probably negative values that shouldn’t be there.

Solution:¶

  • Check for negative values and count occuerances

  • Investigate or clean them

In [226]:
# Check for negative values
print(X_train['no2'].describe())
print('-'*40)
print(f"Min value: {X_train['no2'].min()}")
print('-'*40)
print(f"Negative values count: {(X_train['no2'] < 0).sum()}")
count    11610.000000
mean        44.619483
std        249.396851
min      -9999.000000
25%         27.080000
50%         41.130000
75%         63.750000
max        433.210000
Name: no2, dtype: float64
----------------------------------------
Min value: -9999.0
----------------------------------------
Negative values count: 7
In [227]:
# Remove rows with negative NO2
X_train_cleaned = X_train[X_train['no2'] >= 0]
In [228]:
X_train_cleaned
Out[228]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10 so2 no2 o3 co
0 1 0 0 0 0 0 0 305.04 1452.45 4770457 0 0 1 48.05 5.96 12.51 41.13 467.30
1 0 1 0 0 0 0 0 306.10 3437.36 144736 0 0 1 49.19 16.45 23.31 33.97 700.95
2 0 0 1 0 0 0 0 305.70 10275.79 297638 0 0 1 67.32 29.56 40.44 1.06 1134.87
3 0 0 0 1 0 0 0 306.66 4324.14 1148799 0 0 1 49.19 16.45 23.31 33.97 700.95
4 0 0 0 0 1 0 0 305.44 9046.87 123059 0 0 1 67.32 29.56 40.44 1.06 1134.87
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
11605 0 0 0 0 0 0 1 301.12 4542.29 631723 1 0 0 170.51 28.37 106.93 5.54 2643.59
11606 1 0 0 0 0 0 0 300.12 1452.45 4770457 1 0 0 151.00 9.30 50.04 16.63 1668.93
11607 0 1 0 0 0 0 0 299.93 3437.36 144736 1 0 0 310.17 64.85 148.06 0.00 6195.07
11608 0 0 1 0 0 0 0 299.74 10275.79 297638 1 0 0 260.48 96.32 131.61 0.00 4592.90
11609 0 0 0 1 0 0 0 300.15 4324.14 1148799 1 0 0 310.17 64.85 148.06 0.00 6195.07

11603 rows × 18 columns

In [229]:
# Check for negative values
print(X_train_cleaned['no2'].describe())
print('-'*40)
print(f"Min value: {X_train_cleaned['no2'].min()}")
print('-'*40)
print(f"Negative values count: {(X_train_cleaned['no2'] < 0).sum()}")
count    11603.000000
mean        50.678721
std         36.574232
min          2.210000
25%         27.080000
50%         41.130000
75%         63.750000
max        433.210000
Name: no2, dtype: float64
----------------------------------------
Min value: 2.21
----------------------------------------
Negative values count: 0

The cleaned no2 (After handling corrupted values)¶

In [230]:
# Check distribution again
sns.displot(X_train_cleaned, x='no2')

plt.title('Distribution plot for no2')

plt.show()
print('The distribution of no2 feature seems to be right-skewd distribution')
No description has been provided for this image
The distribution of no2 feature seems to be right-skewd distribution
In [231]:
# Check skewness 
from scipy.stats import skew

# Calculate skewness
skew_value = skew(X_train_cleaned['no2'])
print('-'*30)
print(f"SKewness of no2: {round(skew_value, 4)}")
print('-'*30)
print(f'The skewness is being around {round(skew_value, 4)} which is heavily skewed to the right side')
print('This suggest that the distribution is heavily right-skewed')
------------------------------
SKewness of no2: 2.3724
------------------------------
The skewness is being around 2.3724 which is heavily skewed to the right side
This suggest that the distribution is heavily right-skewed

8. Scaling¶

Log-transformation for right-skewed numerical features¶

All these plots we have found:¶

  • pm10

  • so2

  • o3

  • co

  • no2

They have to be log-transformed due to:¶

  • They are all heavily right-skewed

  • Continuous numerical features

  • Showing long tails and concentrated values near zero

  • Vulnerable to model distortion, especially with linear models or distance-based algorithms (like KNN, SVM, Logistic Regression, etc.)

In [232]:
# Apply log1p (log(1 + x)) for safe transformation
for col in ['pm10', 'so2', 'o3', 'co', 'no2']:
    X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
    X_test[col + '_log'] = np.log1p(X_test[col])

X_train_cleaned = X_train_cleaned.drop(columns=['co', 'no2', 'o3', 'pm10', 'so2'])
X_test = X_test.drop(columns=['co', 'no2', 'o3', 'pm10', 'so2'])
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1145569456.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  X_train_cleaned[col + '_log'] = np.log1p(X_train_cleaned[col])
In [233]:
X_train_cleaned
Out[233]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
0 1 0 0 0 0 0 0 305.04 1452.45 4770457 0 0 1 3.892840 1.940179 3.740760 6.149109 2.603430
1 0 1 0 0 0 0 0 306.10 3437.36 144736 0 0 1 3.915816 2.859340 3.554491 6.553862 3.190888
2 0 0 1 0 0 0 0 305.70 10275.79 297638 0 0 1 4.224203 3.419692 0.722706 7.035154 3.724247
3 0 0 0 1 0 0 0 306.66 4324.14 1148799 0 0 1 3.915816 2.859340 3.554491 6.553862 3.190888
4 0 0 0 0 1 0 0 305.44 9046.87 123059 0 0 1 4.224203 3.419692 0.722706 7.035154 3.724247
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
11605 0 0 0 0 0 0 1 301.12 4542.29 631723 1 0 0 5.144642 3.379974 1.877937 7.880271 4.681483
11606 1 0 0 0 0 0 0 300.12 1452.45 4770457 1 0 0 5.023881 2.332144 2.869602 7.420537 3.932610
11607 0 1 0 0 0 0 0 299.93 3437.36 144736 1 0 0 5.740339 4.187379 0.000000 8.731670 5.004349
11608 0 0 1 0 0 0 0 299.74 10275.79 297638 1 0 0 5.566358 4.578005 0.000000 8.432485 4.887412
11609 0 0 0 1 0 0 0 300.15 4324.14 1148799 1 0 0 5.740339 4.187379 0.000000 8.731670 5.004349

11603 rows × 18 columns

In [234]:
X_test
Out[234]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
11610 0 0 0 0 1 0 0 300.20 9046.87 123059 1 0 0 5.566358 4.578005 0.000000 8.432485 4.887412
11611 0 0 0 0 0 1 0 300.20 4788.74 54185 1 0 0 5.566358 4.578005 0.000000 8.432485 4.887412
11612 0 0 0 0 0 0 1 300.88 4542.29 631723 1 0 0 4.963893 3.241029 2.151762 7.739555 4.560068
11613 1 0 0 0 0 0 0 299.25 1452.45 4770457 1 0 0 4.968632 2.127041 3.079154 7.362943 3.848657
11614 0 1 0 0 0 0 0 299.10 3437.36 144736 1 0 0 5.800667 4.270676 0.000000 8.765566 5.013498
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 0 0 1 0 0 0 0 302.13 10275.79 297638 0 1 0 2.222459 0.254642 3.305054 5.130135 0.698135
14129 0 0 0 1 0 0 0 302.07 4324.14 1148799 0 1 0 2.145931 0.270027 2.996732 5.162956 0.908259
14130 0 0 0 0 1 0 0 302.09 9046.87 123059 0 1 0 2.222459 0.254642 3.305054 5.130135 0.698135
14131 0 0 0 0 0 1 0 302.09 4788.74 54185 0 1 0 2.222459 0.254642 3.305054 5.130135 0.698135
14132 0 0 0 0 0 0 1 302.12 4542.29 631723 0 1 0 2.178155 0.215111 3.343215 5.093627 0.593327

1291 rows × 18 columns

In [235]:
# Align target to the cleaned X
y_train_cleaned = y_train.loc[X_train_cleaned.index]

Apply Standard Scaler¶

In [236]:
X_train.columns
Out[236]:
Index(['station_10T', 'station_11T', 'station_12T', 'station_15T',
       'station_3T', 'station_5T', 'station_61T', 'temp', 'population_density',
       'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10', 'so2', 'no2', 'o3', 'co'],
      dtype='object')
In [237]:
from sklearn.preprocessing import StandardScaler

# Choose all columns to be scaled
log_cols = ['temp', 'population_density',
        'factory_area', 'season_Cool Season', 'season_Hot Season',
       'season_Rainy Season', 'pm10_log', 'so2_log', 'no2_log', 'co_log', 'o3_log']

# Fit only on training data, transform both
scaler = StandardScaler()
X_train_cleaned[log_cols] = scaler.fit_transform(X_train_cleaned[log_cols])
X_test[log_cols] = scaler.transform(X_test[log_cols])
In [238]:
X_train_cleaned
Out[238]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
0 1 0 0 0 0 0 0 0.830109 -1.365528 2.385410 -0.790614 0.0 0.790614 -0.956019 -2.170824 1.152111 -1.869817 -1.757042
1 0 1 0 0 0 0 0 1.162721 -0.680557 -0.560282 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579
2 0 0 1 0 0 0 0 1.037207 1.679312 -0.462913 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776
3 0 0 0 1 0 0 0 1.338441 -0.374538 0.079112 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579
4 0 0 0 0 1 0 0 0.955623 1.255225 -0.574086 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
11605 0 0 0 0 0 0 1 -0.399927 -0.299257 -0.250165 1.264840 0.0 -1.264840 0.706910 -0.285255 0.177407 0.325171 1.456524
11606 1 0 0 0 0 0 0 -0.713712 -1.365528 2.385410 1.264840 0.0 -1.264840 0.546488 -1.657504 0.696286 -0.257739 0.298443
11607 0 1 0 0 0 0 0 -0.773331 -0.680557 -0.560282 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814
11608 0 0 1 0 0 0 0 -0.832951 1.679312 -0.462913 1.264840 0.0 -1.264840 1.267130 1.283698 -0.805205 1.025337 1.774980
11609 0 0 0 1 0 0 0 -0.704299 -0.374538 0.079112 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814

11603 rows × 18 columns

In [239]:
X_test
Out[239]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
11610 0 0 0 0 1 0 0 -0.688609 1.255225 -0.574086 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11611 0 0 0 0 0 1 0 -0.688609 -0.214210 -0.617946 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11612 0 0 0 0 0 0 1 -0.475236 -0.299257 -0.250165 1.264840 0.0 -1.26484 0.466799 -0.467219 0.320683 0.146753 1.268765
11613 1 0 0 0 0 0 0 -0.986705 -1.365528 2.385410 1.264840 0.0 -1.26484 0.473094 -1.926109 0.805932 -0.330763 0.168616
11614 0 1 0 0 0 0 0 -1.033773 -0.680557 -0.560282 1.264840 0.0 -1.26484 1.578393 0.881218 -0.805205 1.447660 1.969963
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 0 0 1 0 0 0 0 -0.083005 1.679312 -0.462913 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14129 0 0 0 1 0 0 0 -0.101832 -0.374538 0.079112 -0.790614 1.0 -1.26484 -3.276662 -4.358073 0.762805 -3.120188 -4.378508
14130 0 0 0 0 1 0 0 -0.095556 1.255225 -0.574086 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14131 0 0 0 0 0 1 0 -0.095556 -0.214210 -0.617946 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14132 0 0 0 0 0 0 1 -0.086143 -0.299257 -0.250165 -0.790614 1.0 -1.26484 -3.233855 -4.429991 0.944099 -3.208091 -4.865529

1291 rows × 18 columns

In [240]:
y_test
Out[240]:
11610    144.39
11611    144.39
11612     87.53
11613     80.80
11614     32.59
          ...  
14128      3.96
14129      4.18
14130      3.96
14131      3.96
14132      3.81
Name: pm2_5, Length: 1291, dtype: float64
In [241]:
y_train
Out[241]:
0         20.680
1         31.130
2         38.680
3         31.130
4         38.680
          ...   
11605     99.460
11606     81.520
11607     63.305
11608    144.390
11609     63.305
Name: pm2_5, Length: 11610, dtype: float64

Check the summary statistics for both features to confirm the transformations¶

In [242]:
print(X_train_cleaned[log_cols].describe())
print('-'*140)
print('According to the summary statistics, the \'pm10_log\', \'so2_log\', \'co_log\', \'o3_log\' column has been successfully transformed and standardized')
               temp  population_density  factory_area  season_Cool Season  \
count  1.160300e+04        1.160300e+04  1.160300e+04        1.160300e+04   
mean  -5.584892e-15        1.604240e-16  5.492269e-18       -2.351533e-16   
std    1.000043e+00        1.000043e+00  1.000043e+00        1.000043e+00   
min   -3.048272e+00       -1.365528e+00 -6.179456e-01       -7.906137e-01   
25%   -7.105744e-01       -6.805566e-01 -5.740861e-01       -7.906137e-01   
50%   -3.279908e-02       -2.992572e-01 -4.629130e-01       -7.906137e-01   
75%    6.951818e-01        1.255225e+00  7.911237e-02        1.264840e+00   
max    3.873823e+00        1.679312e+00  2.385410e+00        1.264840e+00   

       season_Hot Season  season_Rainy Season      pm10_log       so2_log  \
count            11603.0         1.160300e+04  1.160300e+04  1.160300e+04   
mean                 0.0        -7.838444e-17  5.290950e-16  2.694465e-16   
std                  0.0         1.000043e+00  1.000043e+00  1.000043e+00   
min                  0.0        -1.264840e+00 -3.012631e+00 -3.016115e+00   
25%                  0.0        -1.264840e+00 -6.606180e-01 -6.506113e-01   
50%                  0.0         7.906137e-01  7.491591e-02  1.684495e-01   
75%                  0.0         7.906137e-01  7.173640e-01  7.531009e-01   
max                  0.0         7.906137e-01  2.608362e+00  2.483305e+00   

            no2_log        co_log        o3_log  
count  1.160300e+04  1.160300e+04  1.160300e+04  
mean   3.331339e-16  7.446522e-16  5.878833e-17  
std    1.000043e+00  1.000043e+00  1.000043e+00  
min   -3.979510e+00 -2.373563e+00 -8.052052e-01  
25%   -6.256302e-01 -7.024295e-01 -8.052052e-01  
50%    1.760925e-03 -4.370793e-02 -6.291494e-01  
75%    6.663764e-01  7.088715e-01  8.532980e-01  
max    3.609227e+00  2.840489e+00  2.462989e+00  
--------------------------------------------------------------------------------------------------------------------------------------------
According to the summary statistics, the 'pm10_log', 'so2_log', 'co_log', 'o3_log' column has been successfully transformed and standardized

9. Modeling¶

Modeling using non-parametric method (XGBoost, RandomForest, DecisionTree)¶

Scaling for XGBoost model¶

  • We will use these scaled X features for XGBoost model only
In [243]:
# Import modules for modeling
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
In [244]:
X_test
Out[244]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
11610 0 0 0 0 1 0 0 -0.688609 1.255225 -0.574086 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11611 0 0 0 0 0 1 0 -0.688609 -0.214210 -0.617946 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11612 0 0 0 0 0 0 1 -0.475236 -0.299257 -0.250165 1.264840 0.0 -1.26484 0.466799 -0.467219 0.320683 0.146753 1.268765
11613 1 0 0 0 0 0 0 -0.986705 -1.365528 2.385410 1.264840 0.0 -1.26484 0.473094 -1.926109 0.805932 -0.330763 0.168616
11614 0 1 0 0 0 0 0 -1.033773 -0.680557 -0.560282 1.264840 0.0 -1.26484 1.578393 0.881218 -0.805205 1.447660 1.969963
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 0 0 1 0 0 0 0 -0.083005 1.679312 -0.462913 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14129 0 0 0 1 0 0 0 -0.101832 -0.374538 0.079112 -0.790614 1.0 -1.26484 -3.276662 -4.358073 0.762805 -3.120188 -4.378508
14130 0 0 0 0 1 0 0 -0.095556 1.255225 -0.574086 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14131 0 0 0 0 0 1 0 -0.095556 -0.214210 -0.617946 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14132 0 0 0 0 0 0 1 -0.086143 -0.299257 -0.250165 -0.790614 1.0 -1.26484 -3.233855 -4.429991 0.944099 -3.208091 -4.865529

1291 rows × 18 columns

In [245]:
# Double-Check Time Splits (Data Leakage Check)
print("Train Date Range:", X_train_cleaned.index.min(), "to", X_train_cleaned.index.max())
print("Test Date Range:", X_test.index.min(), "to", X_test.index.max())
Train Date Range: 0 to 11609
Test Date Range: 11610 to 14132
In [246]:
X_test.shape
Out[246]:
(1291, 18)
In [247]:
X_train_cleaned.shape
Out[247]:
(11603, 18)
In [248]:
# Define the models
models = {
    "RandomForest": RandomForestRegressor(random_state=42),
    "XGBoost": XGBRegressor(objective="reg:squarederror", random_state=42),
    "DecisionTree": DecisionTreeRegressor(random_state=42)
}

# Define hyperparameter grids
param_grids = {
    "RandomForest": {
        "n_estimators": [100, 200, 250],
        "max_depth": [8, 12, 15],
        "min_samples_split": [3, 5]
    },
    "XGBoost": {
        "n_estimators": [100, 200, 250],
        "learning_rate": [0.1, 0.01, 0.001],
        "max_depth": [8, 12],
        "subsample": [0.7, 0.9],
        "colsample_bytree": [0.7, 1]
    },
    "DecisionTree": {
        "max_depth": [5, 10, 20],
        "min_samples_split": [5, 7, 12]
    }
}
In [249]:
X_train_cleaned = X_train_cleaned.drop(columns=[col for col in X_train_cleaned.columns if col.startswith("station_")])
In [250]:
X_train_cleaned
Out[250]:
temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
0 0.830109 -1.365528 2.385410 -0.790614 0.0 0.790614 -0.956019 -2.170824 1.152111 -1.869817 -1.757042
1 1.162721 -0.680557 -0.560282 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579
2 1.037207 1.679312 -0.462913 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776
3 1.338441 -0.374538 0.079112 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579
4 0.955623 1.255225 -0.574086 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776
... ... ... ... ... ... ... ... ... ... ... ...
11605 -0.399927 -0.299257 -0.250165 1.264840 0.0 -1.264840 0.706910 -0.285255 0.177407 0.325171 1.456524
11606 -0.713712 -1.365528 2.385410 1.264840 0.0 -1.264840 0.546488 -1.657504 0.696286 -0.257739 0.298443
11607 -0.773331 -0.680557 -0.560282 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814
11608 -0.832951 1.679312 -0.462913 1.264840 0.0 -1.264840 1.267130 1.283698 -0.805205 1.025337 1.774980
11609 -0.704299 -0.374538 0.079112 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814

11603 rows × 11 columns

In [251]:
X_test = X_test.drop(columns=[col for col in X_test.columns if col.startswith("station_")])
In [252]:
X_test
Out[252]:
temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
11610 -0.688609 1.255225 -0.574086 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11611 -0.688609 -0.214210 -0.617946 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11612 -0.475236 -0.299257 -0.250165 1.264840 0.0 -1.26484 0.466799 -0.467219 0.320683 0.146753 1.268765
11613 -0.986705 -1.365528 2.385410 1.264840 0.0 -1.26484 0.473094 -1.926109 0.805932 -0.330763 0.168616
11614 -1.033773 -0.680557 -0.560282 1.264840 0.0 -1.26484 1.578393 0.881218 -0.805205 1.447660 1.969963
... ... ... ... ... ... ... ... ... ... ... ...
14128 -0.083005 1.679312 -0.462913 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14129 -0.101832 -0.374538 0.079112 -0.790614 1.0 -1.26484 -3.276662 -4.358073 0.762805 -3.120188 -4.378508
14130 -0.095556 1.255225 -0.574086 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14131 -0.095556 -0.214210 -0.617946 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14132 -0.086143 -0.299257 -0.250165 -0.790614 1.0 -1.26484 -3.233855 -4.429991 0.944099 -3.208091 -4.865529

1291 rows × 11 columns

In [253]:
y_test
Out[253]:
11610    144.39
11611    144.39
11612     87.53
11613     80.80
11614     32.59
          ...  
14128      3.96
14129      4.18
14130      3.96
14131      3.96
14132      3.81
Name: pm2_5, Length: 1291, dtype: float64
In [254]:
y_train_cleaned
Out[254]:
0         20.680
1         31.130
2         38.680
3         31.130
4         38.680
          ...   
11605     99.460
11606     81.520
11607     63.305
11608    144.390
11609     63.305
Name: pm2_5, Length: 11603, dtype: float64
In [255]:
X_train_cleaned
Out[255]:
temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
0 0.830109 -1.365528 2.385410 -0.790614 0.0 0.790614 -0.956019 -2.170824 1.152111 -1.869817 -1.757042
1 1.162721 -0.680557 -0.560282 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579
2 1.037207 1.679312 -0.462913 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776
3 1.338441 -0.374538 0.079112 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579
4 0.955623 1.255225 -0.574086 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776
... ... ... ... ... ... ... ... ... ... ... ...
11605 -0.399927 -0.299257 -0.250165 1.264840 0.0 -1.264840 0.706910 -0.285255 0.177407 0.325171 1.456524
11606 -0.713712 -1.365528 2.385410 1.264840 0.0 -1.264840 0.546488 -1.657504 0.696286 -0.257739 0.298443
11607 -0.773331 -0.680557 -0.560282 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814
11608 -0.832951 1.679312 -0.462913 1.264840 0.0 -1.264840 1.267130 1.283698 -0.805205 1.025337 1.774980
11609 -0.704299 -0.374538 0.079112 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814

11603 rows × 11 columns

In [256]:
# Perform Cross-Validation and GridSearchCV

from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
from sklearn.model_selection import train_test_split, cross_val_score

best_models = {}

for model_name, model in models.items():
    print(f"Training {model_name}...")

    # # Use scaled data for XGBoost, but original data for RF and DT
    # X_train_cleaned = X_train_cleaned if model_name == "XGBoost" else X_train
    # X_test_used = X_test if model_name == "XGBoost" else X_test

    # GridSearchCV
    grid_search = GridSearchCV(model, param_grids[model_name], cv=5, scoring="neg_mean_squared_error", n_jobs=-1)
    grid_search.fit(X_train_cleaned, y_train_cleaned)

    # Best model
    best_model = grid_search.best_estimator_
    best_models[model_name] = best_model

    # Cross-validation scores
    mse_scores = -cross_val_score(best_model, X_train_cleaned, y_train_cleaned, cv=5, scoring="neg_mean_squared_error")
    rmse_scores = np.sqrt(mse_scores)

    mae_scores = -cross_val_score(best_model, X_train_cleaned, y_train_cleaned, cv=5, scoring="neg_mean_absolute_error")
    r2_scores = cross_val_score(best_model, X_train_cleaned, y_train_cleaned, cv=5, scoring="r2")

    mean_cv_rmse = rmse_scores.mean()
    mean_cv_mae = mae_scores.mean()
    mean_cv_mse = -mse_scores.mean()
    mean_cv_r2 = r2_scores.mean()

    # Evaluate on test set
    y_pred = best_model.predict(X_test)
    test_rmse = np.sqrt(mean_squared_error(y_test, y_pred))
    test_mae = mean_absolute_error(y_test, y_pred)
    test_mse = mean_squared_error(y_test, y_pred)
    test_r2 = r2_score(y_test, y_pred)

    # Print evaluation metrics
    print(f"{model_name} Mean CV RMSE: {mean_cv_rmse}")
    print(f"{model_name} Mean CV MAE: {mean_cv_mae}")
    print(f"{model_name} Mean CV MSE: {mean_cv_mse}")
    print(f"{model_name} Mean CV R²: {mean_cv_r2}")

    print(f"{model_name} Test RMSE: {test_rmse}")
    print(f"{model_name} Test MAE: {test_mae}")
    print(f"{model_name} Test MSE: {test_mse}")
    print(f"{model_name} Test R²: {test_r2}\n") 
Training RandomForest...
RandomForest Mean CV RMSE: 12.852386449819278
RandomForest Mean CV MAE: 7.649770542406318
RandomForest Mean CV MSE: -177.6366260200761
RandomForest Mean CV R²: 0.8068362723980183
RandomForest Test RMSE: 10.982860270514914
RandomForest Test MAE: 5.833144424345439
RandomForest Test MSE: 120.62321972165493
RandomForest Test R²: 0.8761427145595069

Training XGBoost...
XGBoost Mean CV RMSE: 12.471040897786319
XGBoost Mean CV MAE: 7.48887977393246
XGBoost Mean CV MSE: -168.44409597651915
XGBoost Mean CV R²: 0.8165701665464317
XGBoost Test RMSE: 10.146072088643475
XGBoost Test MAE: 5.807055082978619
XGBoost Test MSE: 102.94277882795016
XGBoost Test R²: 0.8942971911150039

Training DecisionTree...
DecisionTree Mean CV RMSE: 14.777887785541722
DecisionTree Mean CV MAE: 9.759514350563498
DecisionTree Mean CV MSE: -230.9468851787038
DecisionTree Mean CV R²: 0.7457814099000715
DecisionTree Test RMSE: 12.974886321281824
DecisionTree Test MAE: 7.798185472523801
DecisionTree Test MSE: 168.34767505018618
DecisionTree Test R²: 0.8271387043883476

Best Model: XGBoost¶

XGBoost sparkled in cross-validation, it is also stumbled less on the test set.

XGBoost had:

  • Stable performance between CV and test

  • Lowest test RMSE and MSE

  • Highest test R²

Save the model for future usages...¶

In [257]:
import os
import pickle

# Define save directory
save_dir = "../saved_model"
os.makedirs(save_dir, exist_ok=True)  # Ensure directory exists

# File paths
model_path = os.path.join(save_dir, "best_xgb_model.pkl")
scaler_path = os.path.join(save_dir, "scaler.pkl")

# Save column names order during training
with open("../saved_model/log_col_order.pkl", "wb") as f:
    pickle.dump(log_cols, f)


# Save objects
pickle.dump(best_models["XGBoost"], open(model_path, "wb"))  # Save model
pickle.dump(scaler, open(scaler_path, "wb"))  # Save MinMaxScaler (or StandardScaler)

print(f"Best XGBoost model has been successfully saved in {save_dir}")
print(f"The column names order during training has been successfully saved in {save_dir}")
print(f"The scaler has been successfully saved in {save_dir}")
Best XGBoost model has been successfully saved in ../saved_model
The column names order during training has been successfully saved in ../saved_model
The scaler has been successfully saved in ../saved_model

Load the model...¶

In [258]:
X_test.columns
Out[258]:
Index(['temp', 'population_density', 'factory_area', 'season_Cool Season',
       'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log',
       'o3_log', 'co_log', 'no2_log'],
      dtype='object')
In [259]:
# Load saved model and scaler
with open("../saved_model/best_xgb_model.pkl", "rb") as f:
    best_xgb_model = pickle.load(f)
    print("Model loaded successfully!")

with open("../saved_model/scaler.pkl", "rb") as f:
    loaded_scaler = pickle.load(f)
    print("Scaler loaded successfully!")

with open("../saved_model/log_col_order.pkl", "rb") as f:
    log_cols = pickle.load(f)

# # Define other columns used in training
# other_cols = ['temp', 'population_density', 'factory_area',
#               'season_Cool Season', 'season_Hot Season', 'season_Rainy Season']

# Prepare input features
X_test_log = X_test[log_cols]
scaled_log = pd.DataFrame(
    loaded_scaler.transform(X_test_log),  # no .values
    columns=log_cols,
    index=X_test.index
)


# X_test_final = pd.concat([scaled_log, X_test[other_cols]], axis=1)
X_test_final = X_test_log.copy()

# [Optional safety step]
# Ensure column order matches what model was trained with
if hasattr(best_xgb_model, 'feature_names_in_'):
    X_test_final = X_test_final[best_xgb_model.feature_names_in_]

# Make predictions
predictions = best_xgb_model.predict(X_test_final)
Model loaded successfully!
Scaler loaded successfully!

9.Feature Importance¶

Check feature importance¶

In [260]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from xgboost import XGBRegressor

# Fit a XGBoost model on the entire train set for a global view
xgb_model = XGBRegressor(random_state=42)
xgb_model.fit(X_train_cleaned, y_train_cleaned)

# IMPORTANT: Use the actual feature names that were passed into the model
used_features = X_train_cleaned.columns.tolist()
if 'pm2_5' in used_features:
    used_features.remove('pm2_5')
print("Used features (count = {}):".format(len(used_features)))
print(used_features)

# Make sure xgb_model.feature_importances_ has the same length as used_features
print("xgb_model.feature_importances_ shape:", xgb_model.feature_importances_.shape)

# Create a DataFrame with feature importance
importance_df = pd.DataFrame({
    "feature": used_features,
    "importance": xgb_model.feature_importances_
}).sort_values(by="importance", ascending=False)

# Plot feature importance
plt.figure(figsize=(12, 6))
sns.barplot(x="importance", y="feature", data=importance_df, palette="coolwarm")
plt.title("Feature Importance from XGBoost")
plt.tight_layout()
plt.show()
Used features (count = 11):
['temp', 'population_density', 'factory_area', 'season_Cool Season', 'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log', 'o3_log', 'co_log', 'no2_log']
xgb_model.feature_importances_ shape: (11,)
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\1139130461.py:29: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(x="importance", y="feature", data=importance_df, palette="coolwarm")
No description has been provided for this image

Check overall feature correlation to pm2_5¶

In [261]:
# Plot correlation
X_train_cleaned['pm2_5'] = y_train_cleaned
correlation_matrix = X_train_cleaned.corr()
pm25_correlations = correlation_matrix['pm2_5'].drop('pm2_5').sort_values(ascending=False)

plt.figure(figsize=(12, 6))
sns.barplot(x=pm25_correlations.values, y=pm25_correlations.index, palette='coolwarm')
plt.title('Feature Correlation with pm2_5')
plt.xlabel('Correlation Coefficient')
plt.ylabel('Feature')
plt.tight_layout()
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\2790382756.py:7: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(x=pm25_correlations.values, y=pm25_correlations.index, palette='coolwarm')
No description has been provided for this image

Check feature correlation to pm2_5 for each feature one by one¶

Temperature vs pm2_5¶

In [262]:
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import spearmanr

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['temp'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['temp'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('Temperature (Fahrenheit)')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: Temperature vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

Population density vs pm2_5¶

In [263]:
X_test.columns
Out[263]:
Index(['temp', 'population_density', 'factory_area', 'season_Cool Season',
       'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log',
       'o3_log', 'co_log', 'no2_log'],
      dtype='object')
In [264]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['population_density'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['population_density'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('population_density')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: population_density vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

Factory area vs pm2_5¶

In [265]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['factory_area'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['factory_area'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('factory_area')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: factory_area vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

season_Cool Season vs pm2_5¶

In [266]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['season_Cool Season'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['season_Cool Season'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('season_Cool Season')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: season_Cool Season vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

season_Hot Season vs pm2_5 Box_plot¶

In [267]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['season_Hot Season'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['season_Hot Season'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('season_Hot Season')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: season_Hot Seasonn vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

season_Rainy Season vs pm2_5¶

In [268]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['season_Rainy Season'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['season_Rainy Season'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('season_Rainy Season')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: season_Rainy Season vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
C:\Users\Legion 5 Pro\AppData\Local\Temp\ipykernel_41828\2472194936.py:5: ConstantInputWarning: An input array is constant; the correlation coefficient is not defined.
  spearman_coef, _ = spearmanr(X_test['season_Rainy Season'], y_pred)
No description has been provided for this image

pm10 vs pm2_5¶

In [269]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['pm10_log'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['pm10_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('pm10_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: pm10 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

so2 vs pm2_5¶

In [270]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['so2_log'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['so2_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('so2_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: so2 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

o3 vs pm2_5¶

In [271]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['o3_log'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['o3_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('o3_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: o3 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

co vs pm2_5¶

In [272]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['co_log'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['co_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('co_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: co vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image

no2 vs pm2_5¶

In [273]:
import matplotlib.pyplot as plt
import seaborn as sns

# Compute the Spearman correlation coefficient
spearman_coef, _ = spearmanr(X_test['no2_log'], y_pred)

plt.figure(figsize=(8, 6))
sns.regplot(x=X_test['no2_log'], y=y_pred, scatter_kws={"s": 10}, line_kws={"color": "red"})
plt.xlabel('no2_log')
plt.ylabel('Predicted pm2_5')
plt.title(f"Plot Correlation: no2 vs. Predicted PM2_5 (Spearman r = {spearman_coef:.2f})")
plt.grid(True, alpha=0.7)
plt.tight_layout()
plt.show()
No description has been provided for this image
In [274]:
X_train_cleaned
Out[274]:
temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log pm2_5
0 0.830109 -1.365528 2.385410 -0.790614 0.0 0.790614 -0.956019 -2.170824 1.152111 -1.869817 -1.757042 20.680
1 1.162721 -0.680557 -0.560282 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579 31.130
2 1.037207 1.679312 -0.462913 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776 38.680
3 1.338441 -0.374538 0.079112 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579 31.130
4 0.955623 1.255225 -0.574086 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776 38.680
... ... ... ... ... ... ... ... ... ... ... ... ...
11605 -0.399927 -0.299257 -0.250165 1.264840 0.0 -1.264840 0.706910 -0.285255 0.177407 0.325171 1.456524 99.460
11606 -0.713712 -1.365528 2.385410 1.264840 0.0 -1.264840 0.546488 -1.657504 0.696286 -0.257739 0.298443 81.520
11607 -0.773331 -0.680557 -0.560282 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814 63.305
11608 -0.832951 1.679312 -0.462913 1.264840 0.0 -1.264840 1.267130 1.283698 -0.805205 1.025337 1.774980 144.390
11609 -0.704299 -0.374538 0.079112 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814 63.305

11603 rows × 12 columns

In [275]:
X_test
Out[275]:
temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log
11610 -0.688609 1.255225 -0.574086 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11611 -0.688609 -0.214210 -0.617946 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980
11612 -0.475236 -0.299257 -0.250165 1.264840 0.0 -1.26484 0.466799 -0.467219 0.320683 0.146753 1.268765
11613 -0.986705 -1.365528 2.385410 1.264840 0.0 -1.26484 0.473094 -1.926109 0.805932 -0.330763 0.168616
11614 -1.033773 -0.680557 -0.560282 1.264840 0.0 -1.26484 1.578393 0.881218 -0.805205 1.447660 1.969963
... ... ... ... ... ... ... ... ... ... ... ...
14128 -0.083005 1.679312 -0.462913 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14129 -0.101832 -0.374538 0.079112 -0.790614 1.0 -1.26484 -3.276662 -4.358073 0.762805 -3.120188 -4.378508
14130 -0.095556 1.255225 -0.574086 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14131 -0.095556 -0.214210 -0.617946 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450
14132 -0.086143 -0.299257 -0.250165 -0.790614 1.0 -1.26484 -3.233855 -4.429991 0.944099 -3.208091 -4.865529

1291 rows × 11 columns

In [276]:
y_test
Out[276]:
11610    144.39
11611    144.39
11612     87.53
11613     80.80
11614     32.59
          ...  
14128      3.96
14129      4.18
14130      3.96
14131      3.96
14132      3.81
Name: pm2_5, Length: 1291, dtype: float64
In [277]:
y_pred
Out[277]:
array([76.74866422, 76.74866422, 88.01131413, ...,  5.87140468,
        5.87140468,  5.87140468], shape=(1291,))

Actual pm2_5 vs Predicted pm2_5 dataframe with error rate¶

In [278]:
# Combine them into a single DataFrame for comparison
comparison_df = X_test.copy()
comparison_df['y_test'] = y_test.values
comparison_df['y_pred'] = y_pred

# Calculate error rate as percentage difference
comparison_df['error_percent'] = ((comparison_df['y_pred'] - comparison_df['y_test']).abs() / comparison_df['y_test']) * 100

comparison_df
Out[278]:
temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log y_test y_pred error_percent
11610 -0.688609 1.255225 -0.574086 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980 144.39 76.748664 46.846275
11611 -0.688609 -0.214210 -0.617946 1.264840 0.0 -1.26484 1.267130 1.283698 -0.805205 1.025337 1.774980 144.39 76.748664 46.846275
11612 -0.475236 -0.299257 -0.250165 1.264840 0.0 -1.26484 0.466799 -0.467219 0.320683 0.146753 1.268765 87.53 88.011314 0.549885
11613 -0.986705 -1.365528 2.385410 1.264840 0.0 -1.26484 0.473094 -1.926109 0.805932 -0.330763 0.168616 80.80 70.420000 12.846535
11614 -1.033773 -0.680557 -0.560282 1.264840 0.0 -1.26484 1.578393 0.881218 -0.805205 1.447660 1.969963 32.59 63.923526 96.144602
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
14128 -0.083005 1.679312 -0.462913 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450 3.96 5.871405 48.267795
14129 -0.101832 -0.374538 0.079112 -0.790614 1.0 -1.26484 -3.276662 -4.358073 0.762805 -3.120188 -4.378508 4.18 5.871405 40.464227
14130 -0.095556 1.255225 -0.574086 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450 3.96 5.871405 48.267795
14131 -0.095556 -0.214210 -0.617946 -0.790614 1.0 -1.26484 -3.175001 -4.378221 0.924132 -3.161802 -4.703450 3.96 5.871405 48.267795
14132 -0.086143 -0.299257 -0.250165 -0.790614 1.0 -1.26484 -3.233855 -4.429991 0.944099 -3.208091 -4.865529 3.81 5.871405 54.105110

1291 rows × 14 columns

In [279]:
comparison_df['error_percent'].mean()
Out[279]:
np.float64(28.104628985876047)

Inference¶

In [280]:
X_train
Out[280]:
station_10T station_11T station_12T station_15T station_3T station_5T station_61T temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10 so2 no2 o3 co
0 1 0 0 0 0 0 0 305.04 1452.45 4770457 0 0 1 48.05 5.96 12.51 41.13 467.30
1 0 1 0 0 0 0 0 306.10 3437.36 144736 0 0 1 49.19 16.45 23.31 33.97 700.95
2 0 0 1 0 0 0 0 305.70 10275.79 297638 0 0 1 67.32 29.56 40.44 1.06 1134.87
3 0 0 0 1 0 0 0 306.66 4324.14 1148799 0 0 1 49.19 16.45 23.31 33.97 700.95
4 0 0 0 0 1 0 0 305.44 9046.87 123059 0 0 1 67.32 29.56 40.44 1.06 1134.87
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
11605 0 0 0 0 0 0 1 301.12 4542.29 631723 1 0 0 170.51 28.37 106.93 5.54 2643.59
11606 1 0 0 0 0 0 0 300.12 1452.45 4770457 1 0 0 151.00 9.30 50.04 16.63 1668.93
11607 0 1 0 0 0 0 0 299.93 3437.36 144736 1 0 0 310.17 64.85 148.06 0.00 6195.07
11608 0 0 1 0 0 0 0 299.74 10275.79 297638 1 0 0 260.48 96.32 131.61 0.00 4592.90
11609 0 0 0 1 0 0 0 300.15 4324.14 1148799 1 0 0 310.17 64.85 148.06 0.00 6195.07

11610 rows × 18 columns

In [281]:
X_train_cleaned
Out[281]:
temp population_density factory_area season_Cool Season season_Hot Season season_Rainy Season pm10_log so2_log o3_log co_log no2_log pm2_5
0 0.830109 -1.365528 2.385410 -0.790614 0.0 0.790614 -0.956019 -2.170824 1.152111 -1.869817 -1.757042 20.680
1 1.162721 -0.680557 -0.560282 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579 31.130
2 1.037207 1.679312 -0.462913 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776 38.680
3 1.338441 -0.374538 0.079112 -0.790614 0.0 0.790614 -0.925497 -0.967083 1.054647 -1.356620 -0.848579 31.130
4 0.955623 1.255225 -0.574086 -0.790614 0.0 0.790614 -0.515827 -0.233240 -0.427056 -0.746376 -0.023776 38.680
... ... ... ... ... ... ... ... ... ... ... ... ...
11605 -0.399927 -0.299257 -0.250165 1.264840 0.0 -1.264840 0.706910 -0.285255 0.177407 0.325171 1.456524 99.460
11606 -0.713712 -1.365528 2.385410 1.264840 0.0 -1.264840 0.546488 -1.657504 0.696286 -0.257739 0.298443 81.520
11607 -0.773331 -0.680557 -0.560282 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814 63.305
11608 -0.832951 1.679312 -0.462913 1.264840 0.0 -1.264840 1.267130 1.283698 -0.805205 1.025337 1.774980 144.390
11609 -0.704299 -0.374538 0.079112 1.264840 0.0 -1.264840 1.498252 0.772132 -0.805205 1.404683 1.955814 63.305

11603 rows × 12 columns

In [282]:
X_train_cleaned.columns
Out[282]:
Index(['temp', 'population_density', 'factory_area', 'season_Cool Season',
       'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log',
       'o3_log', 'co_log', 'no2_log', 'pm2_5'],
      dtype='object')

Create sample dataframe¶

sample_df1¶

In [283]:
import pandas as pd
import numpy as np
from joblib import load
import matplotlib.pyplot as plt
import seaborn as sns

# ----- Step 1: Load your stored column order -----
log_col_order = load("../saved_model/log_col_order.pkl")  # This should be a list of column names in the correct order

# ----- Step 2: Create your sample raw data and compute log-transformed features -----
# Create the raw sample data as a dictionary
sample_raw = {
    'temp': [95],
    'population_density': [4788.74],
    'factory_area': [54185],
    'season_Cool Season': [1],
    'season_Hot Season': [0],
    'season_Rainy Season': [0],
    'pm10': [78],
    'so2': [27.31],
    'o3': [9.41],
    'co': [2198],
    'no2': [31]
}

# Build the DataFrame from raw data
sample_df = pd.DataFrame(sample_raw)

# Compute log-transformed features
sample_df['pm10_log'] = np.log1p(sample_df['pm10'])
sample_df['so2_log'] = np.log1p(sample_df['so2'])
sample_df['o3_log'] = np.log1p(sample_df['o3'])
sample_df['co_log'] = np.log1p(sample_df['co'])
sample_df['no2_log'] = np.log1p(sample_df['no2'])

# Drop the raw pollutant columns as your model was trained on the log-transformed values
sample_df.drop(columns=['pm10', 'so2', 'o3', 'co', 'no2'], inplace=True)

# ----- Step 3: Reorder sample DataFrame according to log_col_order -----
# Make sure that the list log_col_order exactly matches the columns expected by the model.
# For example, log_col_order might be:
# ['temp', 'population_density', 'factory_area', 'season_Cool Season',
#  'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log', 'no2_log', 'co_log', 'o3_log']
sample_df = sample_df[log_col_order]
print("Sample DataFrame after reordering:")
print(sample_df)

# ----- Step 4: Load the scaler and best XGBoost model -----
scaler = load("../saved_model/scaler.pkl")
best_xgb_model = load("../saved_model/Best_XGBoost_model.pkl")  # Adjust the file name as necessary

# ----- Step 5: Scale the sample data -----
sample_df_scaled = sample_df.copy()
sample_df_scaled[log_col_order] = scaler.transform(sample_df[log_col_order])

# ----- Step 6: Make prediction -----
y_pred_sample = best_xgb_model.predict(sample_df_scaled)

print("Predicted PM2.5 for the sample:", y_pred_sample[0])
Sample DataFrame after reordering:
   temp  population_density  factory_area  season_Cool Season  \
0    95             4788.74         54185                   1   

   season_Hot Season  season_Rainy Season  pm10_log   so2_log   no2_log  \
0                  0                    0  4.369448  3.343215  3.465736   

     co_log    o3_log  
0  7.695758  2.342767  
Predicted PM2.5 for the sample: 51.722874
c:\Users\Legion 5 Pro\AppData\Local\Programs\Python\Python311\Lib\pickle.py:1718: UserWarning: [21:52:24] WARNING: C:\actions-runner\_work\xgboost\xgboost\src\data\../common/error_msg.h:82: If you are loading a serialized model (like pickle in Python, RDS in R) or
configuration generated by an older version of XGBoost, please export the model by calling
`Booster.save_model` from that version first, then load it back in current version. See:

    https://xgboost.readthedocs.io/en/stable/tutorials/saving_model.html

for more details about differences between saving model and serializing.

  setstate(state)

sample_df2¶

In [284]:
import pandas as pd
import numpy as np
from joblib import load
import matplotlib.pyplot as plt
import seaborn as sns

# ----- Step 1: Load your stored column order -----
log_col_order = load("../saved_model/log_col_order.pkl")  # This should be a list of column names in the correct order

# ----- Step 2: Create your sample raw data and compute log-transformed features -----
# Create the raw sample data as a dictionary
sample_raw = {
    'temp': [95],
    'population_density': [4788.74],
    'factory_area': [54185],
    'season_Cool Season': [1],
    'season_Hot Season': [0],
    'season_Rainy Season': [0],
    'pm10': [138],
    'so2': [27.31],
    'o3': [9.41],
    'co': [2198],
    'no2': [31]
}

# Build the DataFrame from raw data
sample_df = pd.DataFrame(sample_raw)

# Compute log-transformed features
sample_df['pm10_log'] = np.log1p(sample_df['pm10'])
sample_df['so2_log'] = np.log1p(sample_df['so2'])
sample_df['o3_log'] = np.log1p(sample_df['o3'])
sample_df['co_log'] = np.log1p(sample_df['co'])
sample_df['no2_log'] = np.log1p(sample_df['no2'])

# Drop the raw pollutant columns as your model was trained on the log-transformed values
sample_df.drop(columns=['pm10', 'so2', 'o3', 'co', 'no2'], inplace=True)

# ----- Step 3: Reorder sample DataFrame according to log_col_order -----
# Make sure that the list log_col_order exactly matches the columns expected by the model.
# For example, log_col_order might be:
# ['temp', 'population_density', 'factory_area', 'season_Cool Season',
#  'season_Hot Season', 'season_Rainy Season', 'pm10_log', 'so2_log', 'no2_log', 'co_log', 'o3_log']
sample_df = sample_df[log_col_order]
print("Sample DataFrame after reordering:")
print(sample_df)

# ----- Step 4: Load the scaler and best XGBoost model -----
scaler = load("../saved_model/scaler.pkl")
best_xgb_model = load("../saved_model/Best_XGBoost_model.pkl")  # Adjust the file name as necessary

# ----- Step 5: Scale the sample data -----
sample_df_scaled = sample_df.copy()
sample_df_scaled[log_col_order] = scaler.transform(sample_df[log_col_order])

# ----- Step 6: Make prediction -----
y_pred_sample = best_xgb_model.predict(sample_df_scaled)

print("Predicted PM2.5 for the sample:", y_pred_sample[0])
Sample DataFrame after reordering:
   temp  population_density  factory_area  season_Cool Season  \
0    95             4788.74         54185                   1   

   season_Hot Season  season_Rainy Season  pm10_log   so2_log   no2_log  \
0                  0                    0  4.934474  3.343215  3.465736   

     co_log    o3_log  
0  7.695758  2.342767  
Predicted PM2.5 for the sample: 129.86984